Super- und Subclass

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo,

mir ist der Code nicht ganz klar und zwar war ich der Meinung, dass einmal doIt von der Superklasse und einmal doIt von der Main- Klasse aufgerufen wird mit dem Code

sb.doIt();
((SuperClass)sb).doIt();


aber das ist nicht so, es wird immer doit() von der Mainklasse aufgerufen.
Warum ist das so, es wird ja immer die Methode aufgerufen, von der die Referenz ist, oder täusch ich mich da???



Code:
class SuperClass {
    public int doIt(){
        System.out.println("super doIt()");
        return 1;
        }
    }

public class Main extends SuperClass{


    @Override
    public int doIt() {
        System.out.println("********subclas doIt()");
        return 1;
        }

    public static void main(String... args) {
        SuperClass sb = new Main();
        sb.doIt();
        ((SuperClass)sb).doIt();
        }

}
 
S

SlaterB

Gast
es wird immer die Methode der überschreibenden Klasse aufgerufen, ganz egal von welchem Typ die Variablen ist,
das ist ja wohl die absolute Grundlage, sonst ginge gar nix

innerhalb einer Klasse kann man fürs eigene Objekt per super.doIt() die Methode der nächsthöheren Schicht ansprechen
 

Ebenius

Top Contributor
In Java sind alle Methoden virtuell verknüpft. Das bedeutet in etwa, dass die Implementation einer (nicht statischen, nicht privaten) Methode immer von der Klasse abhängt über die das Objekt erzeugt wurde, nicht von dem Typ der Variable an der Stelle des Aufrufes. In anderen Sprachen (zum Beispiel C#, C++, Delphi) unterscheidet man zwischen virtuellen und nicht virtuellen Methoden indem man bei der Deklaration jeder Methode angibt, ob sie virtuell ist. In Java bleibt uns diese zusätzliche Unklarheit zum Glück erspart; wann immer sich die Frage stellen kann, ist die Methode virtuell.

Wenn Du Englisch kannst, hilft Dir eventuell dieser Wikipedia-Artikel etwas weiter.

Der Type-Cast in Zeile 21 bringt übrigens überhaupt gar niemals irgendeinen Effekt, da die Variable sb ohnehin mit dem Typ "SuperClass" deklariert ist.

Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Super User via Processbuilder (Linux) Allgemeine Java-Themen 3
J Überschriebene Funktion soll nicht die super Funktion aufrufen Allgemeine Java-Themen 4
perlenfischer1984 Mit Lombok Builder Felder in Super Klasse füllen Allgemeine Java-Themen 12
Hacer List<? super E> Allgemeine Java-Themen 10
P Performance: super explizit erwähnen oder weglassen? Allgemeine Java-Themen 5
T Super Klasse Vererbung Problem :/ Allgemeine Java-Themen 10
E Super erzwingen, konzept/pattern gesucht. Allgemeine Java-Themen 8
G super- Methode aufrufen Allgemeine Java-Themen 21
trash super + JTable Allgemeine Java-Themen 7
trash super() mit Variable bestücken Allgemeine Java-Themen 3
S Stellung von super() Allgemeine Java-Themen 4
G super.super Allgemeine Java-Themen 7
conan2 super-super-Konstruktor? Allgemeine Java-Themen 3
P mehrere super klassen Allgemeine Java-Themen 10
thE_29 Foxtrot doch nicht so super. Allgemeine Java-Themen 12
D super-Konstruktor ist nicht super ;) Allgemeine Java-Themen 6
H Super-Konstruktor Allgemeine Java-Themen 7
V Vererbungsproblem --> Implicit super constructor Allgemeine Java-Themen 5
thE_29 PrintStream und super.println() Allgemeine Java-Themen 2
T Klasse mit neuer Eigenschaft für jede Subclass (kompliziert) Allgemeine Java-Themen 6
A HILFE: subclass von Hashtable mit listener aufstellen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben