Android 中摘要 class 的最佳示例

Best example of Abstract class in Android

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

我的代码:

MainActivity.java

public class MainActivity extends MyActivity {

    @Override
    public void onTest() {

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

    } }

MyActivity.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 中使用摘要,因为我以前从未这样做过。

我已经为摘要开发了示例 Class:

摘要class:

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();

}

非抽象 class 扩展了抽象 class:

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 !!!");
  }
}

结论:

  • 抽象方法 of abstract class must be Override in 派生class
  • 非抽象方法 of 抽象class 总是调用方法 of 超棒class

希望这肯定有意义。

我想完成 举例回答。

  • abstract class 的抽象方法必须在 Derived 中被 Override class
  • 抽象的非抽象方法class总是调用Super的方法class
  • 如果abstract class实现了一个Interface可以不实现方法而让finally驱动class实现接口方法

例如 GOD 通过实现此接口 (:D) 控制他在地球上的生物 :

public interface َAliveCreature{

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

}

并且这是抽象的 class live,有一个 public 方法和一个抽象方法:

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
}

这终于被驱动了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() 并且还必须实现抽象 class 接口方法!所以这就是抽象 class 的力量,它可以处理和添加一些方法并将剩余的接口方法传递给消费者,并且非常适合编写库。

注册和取消注册任何 BroadcastReceiver

这是一个示例,您可以使用摘要 class 注册和取消注册 ANY BroadcastReceiver

BaseClass:

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();
    }

}

Child class:

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));
    }

}

完整的工作代码

Here