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));
}
}
完整的工作代码
我正在尝试在 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));
}
}