Vererbung Selbstreferenzparameter

anne1994

Mitglied
Hey Leute,

bin schon länger dabei mir Java beizubringen, jedoch bin ich auf ein Beispiel gestoßen was ich nicht verstehe.
Meine Verständnisprobleme liegen bei dem Fettgedruckten.

Java:
class SuperClass {
int myI;
void neuesI([B]SuperClass this[/B], int i){
this.myI=i;
}
void anyMethod([B]SuperClass this[/B]){
this.neuesI(this.42);
}
}
class SubClass extends SuperClass
{


void anyMethod ([B]Subclass this[/B]){
super.anyMethod([B]this[/B]);
}
}

Also ich weiß eigentlich was this macht und die klassischen Beispiele wie

Java:
public Class{

int i=1

machwas(int e){

this.i=e;
}

}
verstehe ich auch. Nur in meinem obigen Beispiel verstehe ich nicht was genau passiert wenn in der Methode neuesI Superclass this erwartet wird als erster Parameter-was bedeutet das? Irgendein Objekt was vom Typ SuperClass ist?
Und woher weiß der Compiler was zu übergeben ist wenn dort nur this als Parameter in den Methodenklammern steht wie hier bei super.anyMethod(this);

Vielen Dank vorab.
 
Zuletzt bearbeitet von einem Moderator:

Robat

Top Contributor
Der Code würde so nicht funktionieren, da this in Java ein Schlüsselwort ist und deshalb auch nicht als Variablennamen benutzt werden kann.
Wo hast du den Code denn her?
 

Robat

Top Contributor
Ich denke mal der Code soll eher so aussehen.
Java:
class SuperClass {
   int myI;
   void neuesI(int i){
      this.myI=i;
   }
   void anyMethod(){
      this.neuesI(42);
   }
}
class SubClass extends SuperClass {
   void anyMethod () {
      super.anyMethod();
   }
}
Eventuell war das fett gedruckte nur dazu da um zuzeigen, dass man in jeder Methode der Klasse Zugriff auf das this Schlüsselwort hat.
 

Robat

Top Contributor
In einer Methode / einem Konstruktor einer Klasse ist this die Referenz auf das aktuelle Objekt auf welchem die Methode / der Konstruktor aufgerufen wurde.
In deinen Beispielen veränderst du also entweder die Attribute des aktuellen Objektes oder rufst dessen Methoden auf.
 

anne1994

Mitglied
Ok also mein eigentlicher code war ja
Java:
class SuperClass {
   int myI;
   void neuesI(SuperClass this, int i){
     this.myI=i;
   }
   void anyMethod(Superclass this){
     this.neuesI(this,42);
   }
}
class SubClass extends SuperClass {
   void anyMethod (Subclass this) {
     super.anyMethod(this);
   }
}

Also würde ich z.B. ein Objekt der Subklasse erstellen was z.B. Objekteins heißt und würde dann sagen Objekteins.super.anyMethod(this);
dann würde sich das this auf das Objekteins beziehen ?
 

mrBrown

Super-Moderator
Mitarbeiter
@mrBrown könntest du mir bitte erläutern was dort passiert? Weil so richtig verstanden habe ich das nicht was bei dem Code abläuft.
Der Code ist auch Unsinn und wird niemals kompiliere - guck dir lieber den Code von @Robat an.

Tatsächlich .. hab ich so ehrlich gesagt noch nie gesehen / gehört. Würde sowas auch nicht nutzen .. wieder was neues gelernt.
Das hat eigentlich nur einen Zweck: man kann this mit Annotationen versehen, die für statische Checks von z.B. Checkstyle/PMD/Findbugs/Checker-Framework etc geprüft werden können
 

Blender3D

Top Contributor
Tatsächlich .. hab ich so ehrlich gesagt noch nie gesehen / gehört. Würde sowas auch nicht nutzen .. wieder was neues gelernt.
Habe so etwas auch noch nicht gesehen. Also aus meiner Sicht ist es unnötig einem Objekt per Methode eine Referenz auf das Objekt selbst zu übergeben, da das Objekt diese Referenz sowieso besitzt.
Wenn jemand den Sinn hier erläutern könnte wäre das super.
 

mrBrown

Super-Moderator
Mitarbeiter
Also würde ich z.B. ein Objekt der Subklasse erstellen was z.B. Objekteins heißt und würde dann sagen Objekteins.super.anyMethod(this);
dann würde sich das this auf das Objekteins beziehen ?
Nein, du würdest auf objekteins einfach anyMethod aufrufen: objekteins.anyMethod().

Der von dir gepostete Code kompiliert nicht, der von @Robat ist das richtige Pendant.
this/super verweisen immer auf die Instanz der Klasse, in der du es benutzt, von außen kann man das nicht benutzen (und wäre auch sinnlos - man hat ja außen schon die Instanz).
 

mrBrown

Super-Moderator
Mitarbeiter
Habe so etwas auch noch nicht gesehen. Also aus meiner Sicht ist es unnötig einem Objekt per Methode eine Referenz auf das Objekt selbst zu übergeben, da das Objekt diese Referenz sowieso besitzt.
Wenn jemand den Sinn hier erläutern könnte wäre das super.

Man kann es nicht übergeben, es ist nicht mehr als "syntaktischer Zucker".
Der Sinn:
Das hat eigentlich nur einen Zweck: man kann this mit Annotationen versehen, die für statische Checks von z.B. Checkstyle/PMD/Findbugs/Checker-Framework etc geprüft werden können
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Vererbung?! Allgemeine Java-Themen 15
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
MiMa Vererbung und Komposition?? Allgemeine Java-Themen 38
Kirby.exe Vererbung bei Generics Allgemeine Java-Themen 7
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
W Generics + Vererbung Allgemeine Java-Themen 47
M Vererbung mithilfe von Bluej Allgemeine Java-Themen 3
M List -Tableview-Javafx-Vererbung Allgemeine Java-Themen 35
D Thema: Vererbung Ober-/Unterklassen Allgemeine Java-Themen 16
D Frage zu Vererbung Allgemeine Java-Themen 5
N Vererbung mit GUI Allgemeine Java-Themen 9
E Vererbung Countable mit Vererbung Allgemeine Java-Themen 6
J 2 Fragen zur Vererbung Allgemeine Java-Themen 5
T Javaklassen und vererbung Allgemeine Java-Themen 32
F Vererbung Allgemeine Java-Themen 5
Neumi5694 Vererbung Restriktive Vererbung Allgemeine Java-Themen 4
A Vererbung Übungsaufgabe Vererbung - Erstellung Klassenhierarchie Allgemeine Java-Themen 1
J Allgemeine Fragen zu Vererbung Allgemeine Java-Themen 1
kaoZ Generics und Vererbung Allgemeine Java-Themen 3
D Problem bei Vererbung abstrakter Klassen Allgemeine Java-Themen 6
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T Super Klasse Vererbung Problem :/ Allgemeine Java-Themen 10
L Unabhängige Auslieferung bei Vererbung Allgemeine Java-Themen 20
S MVC - Vererbung Allgemeine Java-Themen 4
C Enums und Vererbung Allgemeine Java-Themen 6
F Google Guice + Generics + Vererbung Allgemeine Java-Themen 5
D Unterschied Vererbung und Polymorphie? Allgemeine Java-Themen 4
K Vererbung ohne Basisklasse zu kennen Allgemeine Java-Themen 20
Da_Tebe ArrayList<xyz> Verschachtelung oder Vererbung? Allgemeine Java-Themen 6
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
M OOP PropertyChangeListener - Vererbung oder Komposition? Allgemeine Java-Themen 5
S OOP Mehrfache Vererbung von abstrakten Klassen Allgemeine Java-Themen 7
G Designfrage Vererbung ja oder nein Allgemeine Java-Themen 9
S equals - Identität ändern bei Vererbung? Allgemeine Java-Themen 5
dayaftereh Vererbung Hilfe Allgemeine Java-Themen 2
D Vererbung, Reflection und automatischer Methodenaufruf Allgemeine Java-Themen 24
A PropertyChangeListener Vererbung Allgemeine Java-Themen 4
P DefaultTreeCellRenderer Vererbung Allgemeine Java-Themen 5
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
J Vererbung bei abstrakten Klassen Allgemeine Java-Themen 2
S Vererbung: Welche Methode wird verwendet? Allgemeine Java-Themen 9
L Checkstyle: Wann ist eine Methode für Vererbung entworfen? Allgemeine Java-Themen 13
S normale vererbung als interface Allgemeine Java-Themen 2
S statische Methoden und Vererbung Allgemeine Java-Themen 6
R Vererbung - doppelte Paint-Methode Allgemeine Java-Themen 4
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
B Vererbung bei enums ? Allgemeine Java-Themen 3
W Frage zu Vererbung / konkretes Beispiel Allgemeine Java-Themen 4
F Vererbung von SessionBeans Allgemeine Java-Themen 3
O abstract, privat, Vererbung Allgemeine Java-Themen 29
L Annotations mit Vererbung Allgemeine Java-Themen 4
M Singleton und Vererbung? Allgemeine Java-Themen 45
T Problem mit Vererbung Allgemeine Java-Themen 3
V Vererbung und Schleifen Allgemeine Java-Themen 5
C Comparable + Vererbung Funktioniert nicht? Allgemeine Java-Themen 4
A Ansatz Objektorientierung, Methoden Vererbung Allgemeine Java-Themen 2
D Listen von Generischen Typen inkl. Vererbung Allgemeine Java-Themen 2
D Zugriffsmethode nach Vererbung ändern? Allgemeine Java-Themen 5
S Vererbung in UML Allgemeine Java-Themen 3
T Nochmal Frage zu Vererbung Interfaces etc. Allgemeine Java-Themen 10
Y Gedanken zur Vererbung Allgemeine Java-Themen 7
F Vererbung, Generizität und Collections. Allgemeine Java-Themen 7
G Frage zu statischen Variablen bei Vererbung Allgemeine Java-Themen 15
F Vererbung Allgemeine Java-Themen 5
S Vererbung von mehreren Klassen? Allgemeine Java-Themen 5
C enum und Vererbung Allgemeine Java-Themen 3
K Problem mit Vererbung - Kein wirklicher Nutzen. Allgemeine Java-Themen 10
G vererbung vs benutzung Allgemeine Java-Themen 7
L Vererbung klappt nicht Allgemeine Java-Themen 5
W Probleme mit Arrays und Vererbung ! Allgemeine Java-Themen 5
M vererbung einer "selbst-instanzierungs-klasse" Allgemeine Java-Themen 16
J Vererbung. Allgemeine Java-Themen 8
H Frage zur Vererbung Allgemeine Java-Themen 5
S private Instanzvaribalen bei "Innerer-Vererbung" Allgemeine Java-Themen 9
H Vererbung auch ohne erzeugung einer Instanz möglich? Allgemeine Java-Themen 3
M frage zur vererbung Allgemeine Java-Themen 12
G Generics und Vererbung. Allgemeine Java-Themen 21
M Vererbung von Hashtables Allgemeine Java-Themen 5
C dynamische Vererbung Allgemeine Java-Themen 6

Ähnliche Java Themen


Oben