Wie cast-Unterklasse-Objekt zum übergeordneten Objekt
ich habe 2 Klassen, genannt Oberklasse und der Unterklasse, die ich versucht zu casten Objekt der Unterklasse zu Oberklasse, aber Ihr scheint nicht zu funktionieren, wenn ich verwenden möchten, die Unterklasse-Objekt aus der Oberklasse. Bitte helfen Sie, zu erklären. Danke. Diese sind der code:-
public class superclass
{
public void displaySuper()
}
System.out.println("Display Superclass");
}
}
public class subclass extends superclass
{
public void displaySub()
{
System.out.println("Display Subclass");
}
}
public class Testing
{
public static void main(String args[])
{
subclass sub = new subclass();
superclass sup = (superclass) sub;
als ich versuchte, verwenden Sie die displaySub() von der Unterklasse bekomme Fehler
sup.displaySub(); //the displaySub method cant found
}
}
- da
superclass sup
Referenz nicht sehen können, die Mitglieder der Kind-Klasse nimmt überschriebenen Methode.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer Oberklasse kann nicht wissen, Unterklassen Methoden.
Denken Sie an es auf diese Weise:
Haben Sie eine übergeordnete Klasse
Pet
Haben Sie zwei Unterklassen von
Pet
, nämlich:Cat
,Dog
speak
Pet
Oberklasse kennt diese, wie allePet
s sprechen kann (auch wenn Sie es nicht wissen, die genaue mechanik dieses Vorgangs)Dog
jedoch tun können, Dinge, die eine Katze nicht, alsoeatHomework
Dog
zu einemPet
die Beobachter der Anwendung würde nicht bewusst sein, dass diePet
ist in der Tat einDog
(auch wenn wir wissen, wie der Implementierer)eatHomework
einerPet
Konnten Sie Ihr problem lösen, indem Sie dem Programm sagen, dass Sie wissen
sup
ist der Typsubclass
Könnte man lösen das problem vollständig, indem es so etwas wie dieses:
schauen Sie sich dieses tutorial mehr info: überschreibt
Werfen Sie einen Blick auf java-Vererbung: https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
Einer Unterklasse können superclass-Methoden, aber eine Oberklasse nicht verwenden Unterklasse Methoden. Wenn Sie möchten, rufen Sie eine Unterklasse verwenden Unterklassen-Methode, müssen Sie zunächst die Besetzung der übergeordneten Instanz der Unterklasse.
(subclass) sup
Obwohl beide super-und sub-Objekt, zeigen Sie auf dasselbe Objekt im Speicher, super-Objekt weiß nichts über die Existenz der sub.subMethod(). Daher haben Sie den oben genannten Fehler. Die folgende Abbildung zeigt, was passiert ist:
Dies ist nicht zur Arbeit zu gehen, weil Sie gerade ausführen ein Verengung Referenz-Konvertierung. Von den JLS:
In Ihrem Szenario
subclass
ist eine richtige Subtypsuperclass
. Dies bedeutet, es ist zulässig zu deklarieren Sie eine Instanz einessubclass
alssuperclass
:als Sie schon vorher entdeckt.
Jedoch Klasse Mitglieder sind immer nur dann übertragen via die Vererbung, dass ist die Superklasse übergeben, entlang der Felder und Methoden Ihrer Unterklassen, aber die Unterklasse nicht das gleiche für seine Oberklasse.
Aus der JLS:
Binden alle diese ziemlich große Worte zusammen:
superclass sc = new subclass();
) haben Sie keinerlei Zugriff von der Unterklasse " die Felder oder Methoden.Als eine Allgemeine Programmier-Praxis, die nur Zeit, die Sie verwenden würden, eine breitere Klasse Erklärung ist, wenn Sie brauchen nur dieses Objekt, um bestimmte Operationen auf der Grundlage der Merkmale der übergeordneten Klasse oder Schnittstelle, und nicht, etwas bestimmtes zu sub-Instanzen der Klasse oder Schnittstelle. In diesem Fall sollten Sie vermeiden mithilfe der Eltern und die Nutzung der Kind-Klasse statt, so verlassen Sie sich auf ein ganz bestimmtes Verhalten, das nur in der Kind-Klasse.