web-dev-qa-db-ja.com

Androidの抽象クラスの最良の例

Android=で1つの抽象クラスとメソッドを設計し、親アクティビティクラスからクラスを拡張することでこれらのメソッドを呼び出しますが、抽象メソッドを呼び出す方法はありません。

MyCode:

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

これが上記のコードスニペットです。AbstractをAndroidで使用する方法はこれまでに行ったことがないためです。

10
deeptimancode

BroadcastReceiverの登録と登録解除

これは、登録および登録解除に使用できる例です[〜#〜] any [〜#〜]BroadcastReceiver using Abstractクラス:

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

}

子クラス:

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

}

完全に機能するコード

ここ

8
Rohit Singh

私はを開発しました抽象クラ​​ス

抽象クラ​​ス:

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

}

非抽象クラス which 抽象クラ​​スを拡張

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

結論:

  • 抽象メソッド抽象クラ​​スオーバーライドする必要があります派生クラス
  • 非抽象メソッド抽象クラ​​ス常にメソッドを呼び出すスーパークラス

これが意味をなすことを願っています。

42
Hiren Patel

完成させたいHiren Partel例を挙げて回答します。

  • 抽象クラスの抽象メソッドは、派生クラスでオーバーライドする必要があります
  • 抽象クラスの非抽象メソッドは常にスーパークラスのメソッドを呼び出す
  • 抽象クラスがインターフェースを実装する場合、メソッドを実装せず、最終的に駆動されるクラスにインターフェースメソッドを実装させることができます

たとえば[〜#〜] god [〜#〜]は、このインターフェイス(:D)を実装することにより、地球上の彼の生き物を制御します:

_public interface َAliveCreature{

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

}
_

そして、これは1つのパブリックメソッドと1つの抽象メソッドを持つ抽象クラスliveです。

_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()を実装し、abstactclassインターフェイスメソッドも実装する必要がありました。したがって、これは、いくつかのメソッドを処理して追加し、残りのインターフェイスメソッドをコンシューマに渡し、ライブラリを作成するのに非常に使いやすい抽象クラスの能力です。

14
Mahdi