web-dev-qa-db-fra.com

Meilleur exemple de classe abstraite dans Android

J'essaie de concevoir une classe et une méthode abstraites dans Android et d'appeler ces méthodes en étendant la classe à partir de ma classe d'activité parent mais je ne sais pas comment appeler ma méthode abstraite.

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

Il s'agit donc de l'extrait de code ci-dessus, veuillez me faire savoir comment utiliser Abstract dans Android parce que je ne l'ai jamais fait auparavant.

10
deeptimancode

Enregistrer et désinscrire un BroadcastReceiver

Voici un exemple que vous pouvez utiliser pour vous inscrire et vous désinscrire [~ # ~] tout [~ # ~] BroadcastReceiver en utilisant une classe abstraite:

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

}

Classe enfant:

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

}

Code de travail complet

ici

8
Rohit Singh

J'ai développé Exemple pour Classe abstraite:

Classe abstraite:

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

}

classe non abstraite qui étend la classe abstraite:

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

Conclusion:

  • méthode abstraite sur classe abstraitedoit être Override dans classe dérivée
  • Méthode non abstraite de classe abstraitetoujours appeler la méthode de Super classe

J'espère que cela aura du sens.

42
Hiren Patel

Je veux compléter Hiren Partel Répondez avec un exemple.

  • La méthode abstraite de la classe abstraite doit être remplacée dans la classe dérivée
  • La méthode non abstraite de la classe abstraite appelle toujours la méthode de la classe Super
  • Si la classe abstraite implémente une interface, il est possible de ne pas implémenter de méthodes et de laisser la classe finalement pilotée implémenter les méthodes d'interface

par exemple [~ # ~] dieu [~ # ~] contrôle sa créature sur Terre en implémentant cette interface (: D):

public interface َAliveCreature{

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

}

Et ceci est une classe abstraite en direct qui a une méthode publique et une méthode abstraite:

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
}

et c'est finalement la classe dirigée, humaine:

public class Human extends MammalAbstract {

    @Override
    void die() {

    }

    @Override
    public void breath() {

    }

    @Override
    public void eat() {

    }

    @Override
    public void move() {

    }

    @Override
    public void haveDream() {

    }
}

comme vous pouvez le voir, l'humain devait implémenter la méthode abstraite haveDream() et également implémenter les méthodes d'interface abstactclass! c'est donc la puissance d'une classe abstraite qui peut gérer et ajouter des méthodes et passer des méthodes d'interface de repos au consommateur et très utiles pour l'écriture de bibliothèques.

14
Mahdi