Mi chiedevo solo perché il compilatore Java decide se è possibile chiamare un metodo basato sul tipo "di riferimento" e non sul tipo "oggetto" effettivo? Per spiegare vorrei citare un esempio:
class A {
void methA() {
System.out.println("Method of Class A.");
}
}
class B extends A {
void methB() {
System.out.println("Method of Class B.");
}
public static void main(String arg[]) {
A ob = new B();
ob.methB(); // Compile Time Error
}
}
Questo produrrà un errore di compilazione del metodo che methB () non trova nella classe A, sebbene il riferimento all'oggetto "ob" contenga un oggetto di classe B che consiste nel metodo methB (). Il motivo è che Java Compiler controlla il metodo in Classe A (il tipo di riferimento) non in Classe B (il tipo di oggetto effettivo). Quindi, voglio sapere qual è la ragione di questo. Perché Java Compiler cerca il metodo in Classe A perché non in Classe B (il tipo di oggetto reale)?