Ausweitung der Oberklasse und classcastexception-Fehler
Ich habe eine Oberklasse, die beiden Methoden, die ich überschreiben möchten. Hier ist mein code:
public class MyCustomClass extends SomeSuperClass {
protected MyCustomClass(params) {
super(params);
}
@Override
public void method1() {
super.method1();
/* here goes my code */
}
@Override
public void method2() {
super.method2();
/* here goes my another code */
}
Habe ich einige Konstruktor, der vergeht, SomeSuperClass-Objekt als parameter, und was ich als Nächstes tun:
MyCustomClass object;
/* now i have object of type SomeSuperClass,
but with my own method1() and method2() */
object = (MyCustomClass) MyCustomClass.item(blahblah);
/* eclipse suggests casting, because MyCustomClass.item()
constructor still returns SomeSuperClass object */
otherobject = OtherConstructor.object(object);
//OtherConstructor passes SomeSuperClass object
Scheint richtig zu sein, aber ich bin immer java.lang.Classcastexception-Fehler in SomeSuperClass während der Ausführung.
ist, wenn ich SomeSuperClassObject, verliere ich meine überschriebenen Methoden.
Beim Gießen, auch wenn es keine Fehler in eclipse, Anwendung stürzt ab.
In anderen Worten, wie kann ich das überschreiben SomeSuperClass mit meinem eigenen Methoden, und immer noch SomeSuperClass-Objekt für die Verwendung mit OtherConstructor?
Wenn es wichtig ist, diesen code für android-app.
MyCustomClass.item
?es ist nicht überschrieben, so ist es (und es ist wirklich laut eclipse-code-Assistent) verwenden Sie einfach Superklasse-Methode
zu pedantisch,
MyCustomClass.item()
ist nicht ein "Konstruktor" noch ist OtherConstructor.object()
InformationsquelleAutor artemy | 2010-11-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Allgemeine Regel, können Sie werfen eine Instanz einer Unterklasse zu Ihrer Oberklasse:
Jedoch, Sie können nicht gegossen eine Instanz einer Oberklasse zu einer Unterklasse:
Dies ist, weil eine
MyCustomClass
- Objekt ist auch einSomeSuperClass
Objekt, aber nicht alleSomeSuperClass
Objekte sindMyCustomClass
Objekte.Können Sie in der Lage zu arbeiten, um dieses bestimmte design-patterns. Java selbst neigt dazu, verwenden Sie die Dekorator-Muster viel.
InformationsquelleAutor Powerlord
Was ich sehe, scheint es, dass MyCustomClass.Element(blahblah) - Aufruf zurückgegeben wird etwas anderes (vielleicht den Eltern) als MyCustomClass. Seine nur ein Teil der in te code, wo Sie sind-casting-Objekt...
also das ist Ihr problem, Sie können nicht umgewandelt übergeordneten Instanz um das Kind. Inheritence-Konstrukt übersetzt werden kann, IST Sprache konstruieren. In Ihrem Fall haben Sie ein Säugetier (Oberklasse) und der Menschlichen (Unterklasse) und Kaninchen Unterklasse. Können Sie erstellen, die Menschliche h und sagen: "h IST ein säugetier (Mammal m = new Mensch())", aber man kann nicht sagen, dass jedes Säugetier ein Mensch ist (Mammal m = new Rabit; Human h = (Menschlichen) m)...und das ist, was Sie getan haben, und warum haben Sie die classcastexception-Fehler...
wie ich es sehe, hast du leicht unterschiedliche Fehler...Sie sagte, dass die Menschen h = new Säugetier(), aber das ist nicht wahr, weil abstrakte säugetier (Ihrer Oberklasse), hat 4 Beine, und der Mensch hat 2 Hände und 2 Beine...so dass Sie cant cast Verweis auf das übergeordnete Element, das Kind....Sie können dies nur, wenn das parent-Referenz enthält das untergeordnete Objekt (Mammal m = new Human(); Human h = (Menschlichen) m) - durch das Sie sagen, dieser Mensch ist ein säugetier - in diesem konkreten säugetier (klappt nicht bei jedem säugetier) ist ein Mensch.
InformationsquelleAutor malejpavouk
Wenn die
item()
Methode deklariert wird, inSomeSuperClass
bezweifle ich, dass es wieder eine Instanz vonMyCustomClass
. Also deine cast(MyCustomClass) MyCustomClass.item(blahblah)
wäre ungültig.Ja, du hast Recht, dass es geschrieben werden konnte, der Weg; ich aber eher bezweifle es. Ich werde das anders formulieren.
InformationsquelleAutor Dave Costa
sieht so, problem gelöst. Ich habe versucht,
und es funktionierte.
BTW, kann jemand das erklären?
InformationsquelleAutor artemy