Super-Methode machen Ich weiß, der Titel klingt vielleicht ein bisschen komisch, aber das ist genau das, was ich bereit bin zu tun. Einfach erklärt: Class A
ist eine Unterklasse von class B
, und class B
ist auch eine Unterklasse von class C
.Eine Super-Klasse Super-Klasse Super
Nun enthalten alle diese Klassen die Methode m()
. In meiner Klasse A
, der einzigen, auf die ich Zugriff habe, da die anderen nur zur Laufzeit verfügbar sind, überschreibe ich dieKlasse der m()
Methode. Die m()
Methode der B
Klasse enthält jedoch einen Aufruf an die m()
Methode der eigenen Superklasse (das ist C
), und, obwohl ich einige Änderungen daran vorgenommen habe, muss ich schließlich auch diese Methode aufrufen.
Ich habe eine Weile gesucht und ich habe gehört, dass dies in ähnlichen Situationen unmöglich wäre, da es "Kapselung brechen würde", und ich verstehe wirklich warum. In meinem Fall mache ich das alles jedoch innerhalb einer überschriebenen Methode, also gibt es irgendeine Möglichkeit, wie ich es tatsächlich so machen kann, dass es so funktioniert? Vielen Dank!
EDIT: Ahm, ich denke, ich habe nicht ruhig gut erklären. Ich überschreibe nur die Methode aus der B-Klasse in meiner C-Klasse. Von dort, innerhalb meiner Methode in der C-Klasse, muss ich die m() -Methode nicht von der B-Klasse aufrufen (was für super.m() funktionieren würde), sondern für die C-Klasse.
Hier ist meine eigentliche Code, wenn sie helfen könnten:
@Override
public void m() {
if(this.au() && this.getGoalTarget() != null && this.vehicle instanceof EntityChicken) {
((EntityInsentient) this.vehicle).getNavigation().a(this.getNavigation().j(), 1.5D);
}
try {
((EntityMonster) this.getClass().getSuperclass().getSuperclass().getConstructor(World.class).newInstance(this.world)).m();
}catch(InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e){
e.printStackTrace();
}
}
sagte Sie Ihre Klasse B-Methode bereits Super (C) Methode aufruft. Was möchten Sie sonst noch? –
Das hört sich alles ein wenig verwirrend an, also 'A erweitert B ', was' C 'ausdehnt - ziemlich genug; und die Methode 'm()' in der Klasse 'B' hat etwas wie' super.m() '- was die Methode' m() 'der Klasse' C' aufruft - ich verstehe nicht, was Sie sagen, das Problem ist hier ? Selbst wenn Sie eine Methode der Basisklasse ('C.m()') überschreiben, hält Sie nichts davon ab, diese Methode mit 'super.m()' von der Kindklasse (Klasse 'B') in Ihrem Fall aufzurufen. – ishmaelMakitla
Ahm, ich glaube, ich habe das nicht gut erklärt. Ich überschreibe nur die Methode aus der B-Klasse in meiner C-Klasse. Von dort, innerhalb meiner Methode in der C-Klasse, muss ich die m() -Methode nicht von der B-Klasse aufrufen (was für super.m() funktionieren würde), sondern für die C-Klasse. – dadus33