10

Java の保護されたアクセス修飾子 (またはその背後にある設計) を理解するのに少し問題があります。パッケージへのアクセスと、抽象メンバを含むクラスを継承するオブジェクトを介したアクセスのことだと思っていました。

以下のサンプルコードを書きました。コメントアウトされた行のコメントを外すと、コンパイル エラーが発生することがわかります。Second の Second オブジェクトを介して pro にアクセスできるのに、Second の First オブジェクトを介してアクセスできないのはなぜですか?

package first;

public class First {

    protected void pro(){
        System.out.println("Can see protected method");
    }

}

package first;

public class InFirst {


    public static void main(String[] args){
        First fst = new First();
        fst.pro();
    }

}

package second;

import first.First;

public class Second extends First {

    public static void main(String[] args){

        First fst = new First();

//      fst.pro();

        Second sec = new Second();
        sec.pro();

    }
}
4

4 に答える 4

1

Javaの保護されたメンバー

同じパッケージ - (デフォルトのように動作します)

同じクラス、その子クラス、および非子クラスでアクセスできます(デフォルトのように動作します)。親または子参照を使用して保護されたメンバーにアクセスすることもできます。

外パッケージ-

itz 子クラスのみがアクセスできます。ここで最も重要な点は、使用される参照は同じ子クラスのみのものでなければならないということです。

于 2017-09-06T15:30:22.707 に答える