class A { //1st code starts here
private void display() {
System.out.println("A class");
}
}
class B extends A {
protected void display() {
System.out.println("B class");
}
}
class Test {
public static void main(String args[]) {
A obj = new B();
obj.display();
}
}
出力:Test.java:22:エラー:表示は() obj.displayでプライベートアクセスを()があります。JAVAのオーバーライドと内部クラス概念
class Outer{ //2nd Code starts here
class Inner1{
private void m2() {
System.out.println("Inner1 class");
}
}
class Inner2 extends Inner1{
protected void m2() {
System.out.println("Inner2 class");
}
}
public static void main(String args[]) {
Outer o=new Outer();
Outer.Inner1 i=o.new Inner2();
i.m2();
}
}
出力:Inner1クラス
はなぜ第二のコードで出力Inner1クラスながら、第一のコードに時間コンパイルエラー?
プライベートメソッドをオーバーライドすることはできません。 –
内部クラスの可視性は、スーパークラスの可視性より大きくすることはできません。 –
囲むクラスはその内部クラスの 'private'メンバーにアクセスできるので、 2番目の例の 'Outer'クラスは' Inner1'クラスの 'private'メソッド' m2'にアクセスすることができます。 – Jesper