Ich habe den Code:Unterschied zwischen den verschiedenen Möglichkeiten, in ein Objekt in Java Instanziieren
class Father{
String name="father";
void f(){System.out.print("father class");}
}
class Son extends Father{
String name = "son";
void f(){System.out.print("son class");}
void f2(){}
}
public class Test {
public static void main(String[] args) {
Father s = new Son();
System.out.println(s.name);// outputs father
s.f();// outputs "son class"
s.f2();// s does not have f2
}
}
Meine Frage ist, was ist der Unterschied s = new Vater zwischen tun Vater() oder, Vater s = new Sohn () oder, Sohn s = neuer Sohn()?
Also, warum verursacht s.f2 im Beispiel einen Fehler? Muss Vater f2() implementieren?
Sie instanziieren 's' als allgemeiner Typ' Vater'-Objekt, obwohl es unter der Haube wirklich ein 'Sohn' ist, ein bestimmter Typ (Unterklasse)' Vater'. Da der Typ von 's', wie Java es sieht,' Vater' ist, und die 'Vater' Klasse keine Methode' f2() 'hat, haben Sie einen Fehler. –
Es ist kein allgemeinerer Objekttyp, das * Objekt * ist immer noch ein 'Sohn', es wird nur einer * Variablen * vom Typ' Vater' zugewiesen. – azurefrog
P.S. Ich kenne die Anwendung nicht, aber macht es nicht mehr Sinn, dass alle Väter Söhne sind, aber nicht alle Söhne Väter sind? –