public class InheritanceDemo {
public static void main(String[] args) {
ParentClass p = new ParentClass();
ChildClass c = new ChildClass();
//Casting ChildClass to ParentClass
ParentClass pc = new ChildClass();
pc.parentClassMethod(); //Output: Parent Class Method (as expected)
//Again Casting Parent Class to ChildClass explictly
//Question 1 for this code
ChildClass cp = (ChildClass) pc;
cp.parentClassMethod(); //Output: Parent Class Method (unexpected)
ChildClass cc1 = (ChildClass) new ParentClass();
cc1.parentClassMethod(); //Compiles, but Run Time Error
ChildClass cc2 = (ChildClass) p;
cc2.parentClassMethod(); //Compiles, but Run Time Error
}
}
class ParentClass {
public void parentClassMethod(){
System.out.println("Parent Class Method");
}
}
class ChildClass extends ParentClass {
public void ParentClassMethod(){
System.out.println("Parent Class Method From Child Class");
}
public void ChildClassMethod(){
System.out.println("Child Class Method");
}
}
質問1:
これで、クラス(オーバーライド)parentClassMethod
の両方ParentClass
で呼び出されるメソッドがあります。toChildClass
をキャストしてからparentClassMethodを呼び出すと、 cpが参照している場合のメソッドの代わりにメソッドを実行するのはなぜですか?ParentClass
ChildClass
ParentClass
ChildClass
ChildClass
質問2:
(私)ChildClass cp = (ChildClass) pc;
(ii)ChildClass cc1 = (ChildClass) new ParentClass();
(iii)ChildClass cc2 = (ChildClass) p;
(i)が正常に機能している場合は、(ii)または(iii)を使用しないのはなぜですか?
どちらの場合もからParentClass
にキャストしているので?ChildClass