14

我正在尝试在 Android 中设计一个抽象类和方法,并通过从我的父 Activity 类扩展类来调用这些方法,但我不知道如何调用我的抽象方法。

我的代码:

MainActivity.java

public class MainActivity extends MyActivity {

    @Override
    public void onTest() {

       Log.d("MyLog", "onTest");

    } }

我的活动.java

public abstract class MyActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

    }

public abstract void onTest(); }

所以这是上面的代码片段,请告诉我,如何在 Android 中使用 Abstract,因为我以前从未这样做过。

4

3 回答 3

45

我为抽象类开发了示例

抽象类:

public abstract class BaseActivity extends Activity {

    public static final String TAG = "Test";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(myView());
        activityCreated();
    }

    public void printMessage(String message){
        System.out.print(message);
    }


    public abstract int myView();
    public abstract void activityCreated();

}

扩展抽象类非抽象类:

public class TestActivity extends BaseActivity {

@Override
public int myView() {
     return R.layout.activity_main;
}

@Override
public void printMessage(String message) {
    super.printMessage(message);
}

@Override
public void activityCreated() {
    Log.i("TestActivity", "Created");

    printMessage("Hello Hiren !!!");
  }
}

结论:

  • 抽象类抽象方法必须派生类中被重写
  • 抽象类非抽象方法总是调用超类的方法

希望这肯定是有道理的。

于 2015-12-17T10:35:51.657 回答
17

我想用一个例子来完成Hiren Partel Answer。

  • 抽象类的抽象方法必须在派生类中被重写
  • 抽象类的非抽象方法总是调用超类的方法
  • 如果抽象类实现了一个接口,可以不实现方法,让最终驱动的类实现接口方法

例如,上帝通过实现这个接口(:D)来控制他在地球上的生物:

public interface َAliveCreature{

    void breath();
    void eat();
    void move();
    void die();

}

这是具有一个公共方法和一个抽象方法的抽象类:

public abstract class MammalAbstract implements َAliveCreature{

public void feedBabyWithMilk(){
    log.i(TAG,"baby was fed");
}

abstract void haveDream();
//this is an abstract method and had to implement in the consumer class
}

这最终是驱动类,人类:

public class Human extends MammalAbstract {

    @Override
    void die() {

    }

    @Override
    public void breath() {

    }

    @Override
    public void eat() {

    }

    @Override
    public void move() {

    }

    @Override
    public void haveDream() {

    }
}

如您所见,人类必须实现抽象方法haveDream()并实现抽象类接口方法!所以这是一个抽象类的力量,它可以处理和添加一些方法,并将其余接口方法传递给消费者,并且对于编写库非常有用。

于 2017-06-24T08:34:19.490 回答
9

注册和注销任何广播接收器

这是一个示例,您可以使用该示例使用 Abstract 类注册和取消注册ANY : BroadcastReceiver

基类:

public abstract class BaseReceiverActivity extends AppCompatActivity{

    private BroadCastReceiver receiver;
    private IntentFilter filter;

    public abstract BroadCastReceiver getReceiver();
    public abstract IntentFilter getFilter();

    @Override
    public void onStart(){
        super.onStart();
        configureReceiver()
        registerReceiver(receiver, filter);
    }

    @Override
    public void onStop(){
        super.onPause();
        unregisterReceiver(receiver);
    }

    private void registerMyReceiver(){        
        registerReceiver(receiver, filter);    
    }

    private void configureReceiver(){
         receiver = getReceiver();
         filter   = getFilter();
    }

}

儿童班:

public class WifiScanner extends BaseReceiverActivity{

    @Override
    public void onCreate(Bundle sis){
         super.onCreate(sis);
         setContentView(R.layout.yourLayout);
    }

    @Override
    public BroadCastReceiver getReceiver(){
         return new YourReceiver();
    }

    @Override
    public IntentFilter getFilter(){
         return IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
    }

}

完整的工作代码

这里

于 2019-04-16T08:56:04.843 回答