2016-10-26 9 views
-3

Ich bin neu in Java und Android-Programmierung. Soweit ich weiß, findViewById wurde auf Elternklassen definiert und ich bin nur neugierig, warum findViewById Methode ohne super Schlüsselwort in der Unterklasse aufrufen kann.Warum findViewByID kann ohne Super-Schlüsselwort

+0

In welchen Fällen denken Sie, ein 'super' Referenz hilft werfen? –

+1

Sie müssen nur super verwenden, wenn Sie die Implementierung in der übergeordneten Klasse aufrufen möchten, wenn Sie die Implementierung in der aktuellen Klasse überschrieben haben. Wenn Sie keine Überschreibung haben, sind 'super.findViewById()' und 'findViewById()' äquivalent. – javanut13

Antwort

-1

Ohne Überschreiben der findViewById-Methode in der untergeordneten Klasse sind super und this im Rahmen der Aktivitätsklasse gleichwertig.

Sie können this.findViewById() tun, oder ActivityName.this.findViewById() aber das ist überflüssig, wenn nicht innerhalb einer anonymen Klasse (dh, wenn Sie ActivityName.this verwenden sollte, aber das ist nicht in den Anwendungsbereich der Frage)

Verwandte Frage: Warum doesn‘ t setContentView brauchen ein super?

+0

>> Aber die Ansicht, die Sie versuchen zu finden, ist in dieser Klasse, nicht die Super-Klasse, und die Elternklasse Implementierung funktioniert gut, so dass keine echte Notwendigkeit, IMO ... Ich denke, diese Zeile ist nicht verwandt, –

+0

und 'this' und' super' sind nicht äquivalent, 'this' bezieht sich normalerweise auf den aktuellen Kontext. Wenn Sie also in einer anonymen Klasse sind (wie View.OnClickListener), bedeutet' this' den 'OnClickListener' nicht die 'Aktivität' –

+0

@MoshErsan Messepunkte. Zur Klarstellung bearbeitet –

0

super Schlüsselwort bezieht sich auf SuperClass (Parent-Klasse) Implementierung, so dass, wenn Sie rufen Sie super.findViewById(...)SuperClass Methode Implementierung zugreifen, und da Ihr SubClass diese Methode nicht außer Kraft setzen; super.findViewById(...) und findViewById(...) sind gleichwertig.

Aber wenn Sie es überschreiben, wird es einen Unterschied machen. hier ein Beispiel:

class MyActivity extends Activity{ 

    void onCreate(....){ 
    View fromParentView = super.findViewById(...); 
    View fromThisView = findViewById(...); 
    } 

    View findViewById(int resId){ 
    throw new IllegalArgumentException(); 
    } 
} 

diese erste fromParentView ordnungsgemäß funktionieren, aber die fromThisView eine Ausnahme

überprüfen Sie bitte https://docs.oracle.com/javase/tutorial/java/IandI/super.html