Per rispondere alla tua domanda, l'auto-creazione della chiamata a super.onCreate() è una funzionalità del plugin ADT. In java, non è possibile forzare direttamente una sottoclasse a chiamare la super implementazione di un metodo, afaik (vedere lo schema descritto in altre risposte per aggirare il problema). Tuttavia, tieni presente che in Android non stai istanziando direttamente oggetti Attività (o oggetti Servizio): passi un Intento al sistema e il sistema crea un'istanza dell'oggetto e chiama suCreate() su di esso (insieme ad altri metodi del ciclo di vita). Quindi il sistema ha un riferimento diretto all'istanza Activity ed è in grado di controllare (presumibilmente) un booleano impostato su true nell'implementazione della superclasse di onCreate(). Anche se non so esattamente come viene implementato, probabilmente sembra qualcosa di simile:
class Activity
{
onCreate()
{
superCalled = true;
...
}
...
}
E nel "sistema" classe di livello che riceve l'intento e un'istanza dell'oggetto di attività da esso:
...
SomeActivitySubclass someActivitySubclassObject = new SomeActivitySubclass();
someActivitySubclassObject.onCreate();
if (!someActivityObject.isSuperCalled())
{
Exception e = new Exception(...) //create an exception with appropriate details
throw e;
}
La mia ipotesi è che probabilmente è leggermente più complessa di così, ma si ottiene l'idea. Eclipse crea automaticamente la chiamata perché il plug-in ADT lo dice, per comodità. Buona programmazione!
Voglio sapere questo. E non è solo Eclipse utile, se rimuovo la chiamata a super.onCreate(), l'app fornisce un errore di runtime che dice: "non ha chiamato super.onCreate()". Quindi sì, ti sta davvero costringendo a chiamare il metodo super. Ma come? –
@RodrigoCastro È possibile rivedere i javadoc per ciascun metodo. Ad esempio [onCreate()] (http://developer.android.com/reference/android/app/Activity.html#onCreate (android.os.Bundle)). –