0
初心者です。継承とprivate
以下の3つのプログラムの実行結果がなぜそうなるのかわかりません。
プログラムA
public class Parent {
private void disp(){
System.out.println("Parent class");
}
public static void main(String[] args) {
Parent p=new Child();
p.disp();
}
}
public class Child extends Parent {
void disp(){
System.out.println("Child class");
}
}
プログラムB
public class Parent {
private void disp(){
System.out.println("Parent class");
}
}
public class Child extends Parent {
void disp(){
System.out.println("Child class");
}
}
public class Exec {
public static void main(String[] args) {
Parent p=new Child();
p.disp();
}
}
プログラムC
public class Parent {
private void disp(){
System.out.println("Parent class");
}
public static void main(String[] args) {
Child p=new Child();
p.disp();
}
}
public class Child extends Parent {}
実行結果
プログラムA : "Parent Class"
プログラムB : コンパイルエラー。
Parentクラスのp.disp();で、[メソッドdisp()は型Parentで不可視です]
プログラムC : コンパイルエラー。
Parentクラスのp.disp();で、[メソッドdisp()は型Parentで不可視です]
プログラムAについて、Parent p=new Child();としたあとにp.disp();とpが自身のdisp()を参照できる意味が分かりません。
Child型のオブジェクトのメンバは、Childクラスのdisp()だけではないのですか?
また、実行できたとしても実行結果が"Parent class"になっていますが"Child class"とオーバーライドされないのはなぜですか?
代わりにParent p=new Parent();としたら実行結果が"Parent class"となることは理解できるのですが。
初心者で新しい概念が次々出てくるので頭の中で整理ができていない状態です。
最終的にプログラムA,B,Cがなぜその結果になるのかを理解したいです。
回答よろしくお願いします。