-1

次のコードがあります

package com.kathy.accessmodifiers2;

public class base extends Object{
protected int a = 10;
}

package com.kathy.accessmodifiers;
import com.kathy.accessmodifiers2.*;

class derived extends base {
public void D() {
    System.out.println("D");
    base b = new base();
    System.out.println(super.a); //line 1
    //System.out.println(b.a); //line 2
    //Only this class can access the proctected member.
    System.out.println(this.a);
    System.out.println(a);
}
}

class derived2 extends derived {
public void D2() {
    System.out.println(a);
}
}

public class Protected {

public static void main(String str[]) {
    new derived2().D();
}
}

行1では、使用しており、出力は10です。行2の場合、基本クラス(別のパッケージ)からクラス(別のパッケージ)のメンバーsuper.aにアクセスしようとしているため、コードはコンパイルされません。アクセス可能の場合はなぜですか?protectedsupersupera

4

2 に答える 2

1
base b = new base();
System.out.println(super.a); //line 1
System.out.println(b.a); //line 2

1 行目: super.myMethod() orsuper.variableは、オーバーライドされたメソッドを呼び出すか、オーバーライドされたプロパティにアクセスします。int aしたがって、1行目で、オーバーライドされた子クラスにアクセスしています。

while in line 2 : アクセス修飾子が含まれint aているため、別のパッケージからアクセスすることはできず、別のパッケージからのインスタンスにアクセスしようとしています。protectedclass Bint abclass B

簡単です。

参照 Javadoc :

  1. キーワード super の使用
  2. クラスのメンバーへのアクセスの制御
于 2013-11-11T12:10:47.510 に答える