Javaでの継承に頭を悩ませようとしています。Superclass object = new Subclass()
これまでのところ、次の方法でオブジェクトを宣言すると、作成された子オブジェクトは親オブジェクトのメソッドに制限されることがわかりました。子の追加メソッドにアクセスしたい場合は、子にキャストする必要があります。しかし、なぜ子クラスでメソッドがまだオーバーライドされているのでしょうか。
これが私の例です
public class Parent {
public Parent() {
}
public void whoAmI(){
System.out.println("I'm a parent");
}
}
public class Child extends Parent {
public Child() {
}
public void whoAmI(){
System.out.println("I'm a child");
}
public void childMethode() {
System.out.println("Foo");
}
}
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Parent> list = new ArrayList<>();
Child c = new Child();
Parent p = new Parent();
Parent pc = new Child();
c.whoAmI();
p.whoAmI();
pc.whoAmI();
// Access child methodess
((Child) pc).childMethode();
list.add(c);
list.add(p);
list.add(pc);
System.out.println(list.size());
}
}
pc.whoAmI()
「私は子供です」と印刷します。「私は親です」と表示されないのはなぜですか?