2015-12-17 9 views
6

Sto provando a progettare una classe astratta e un metodo in Android e chiamare questi metodi estendendo la classe dalla mia classe Attività genitore, ma non so come chiamare il mio metodo astratto.Miglior esempio di classe Abstract in Android

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

quindi questo è il frammento di codice di cui sopra, fatemelo sapere, come utilizzare Abstract in Android perché non l'ho mai fatto prima.

+1

"Non capisco che il mio metodo astratto non venga chiamato". - Non lo chiami da nessuna parte; lo stai solo definendo. –

+0

sì, perché non so come chiamare, puoi per favore fammi sapere come fare che –

+1

'onTest();' –

risposta

30

ho sviluppato Esempio per classe astratta:

Classe astratta: classe

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

} 

non astratta che estende classe astratta:

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

Conclusione:

  • astratta metodo di classe astrattadeve essere Override in classe derivata
  • non metodo astratto di classe astrattachiamare sempre il metodo di Super classe

Spero che questo abbia un senso.

+1

Invece di "Metodo non astratto di classe astratta chiama sempre il metodo della classe Super ", penso che" il metodo non astratto della classe derivata chiamerà sempre il metodo della classe Super "dovrebbe venire. ... Ho ragione ? – Kushal

+2

@Kushal, sì corretto. –

+1

Hey bel esempio .... Sono nel mezzo di un problema di classe astratto nel mio progetto Android come posso usare il metodo startActivityforresult() in una classe che estende una classe astratta – samridhgupta

3

Voglio completare Hiren Partel Rispondere con un esempio.

  • astratta metodo della classe astratta deve essere Override in classe derivata
  • non metodo astratto di classe astratta sempre chiamare il metodo della classe Super
  • Se classe astratta implementa un'interfaccia, è possibile non attuare metodi e lasciare che la classe finalmente spinto a implementare i metodi di interfaccia

ad esempio DIO controlla la sua creatura sulla Terra da implemen ting questa interfaccia (: D):

public interface َAliveCreature{ 

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

} 

E questa è classe astratta dal vivo che hanno un metodo pubblico e un metodo astratto:

public abstract class MammalAbstract implements َAliveCreature{ 

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

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

e questa classe è finalmente guidato, umana:

public class Human extends MammalAbstract { 

    @Override 
    void die() { 

    } 

    @Override 
    public void breath() { 

    } 

    @Override 
    public void eat() { 

    } 

    @Override 
    public void move() { 

    } 

    @Override 
    public void haveDream() { 

    } 
} 

come si vede l'umano ha dovuto implementare il metodo astratto haveDream() e anche implementare i metodi di interfaccia abstactclass! quindi questo è il potere della classe astratta che può gestire e aggiungere qualche metodo e passare il resto Metodi di interfaccia al consumatore e molto utile per le librerie di scrittura.