簡體   English   中英

Java基類中超類的受保護方法會怎樣?

[英]What happens to protected method of a super class in base class in Java?

我的package1有一個A類,而package2中的B繼承了A A包含protected方法m1 現在我的疑問是,當我在另一個也是package2C創建對象B時,對象B無法訪問方法m1為何? 下面是我的代碼

package com.package1;

public class A {

    protected void m1(){
        System.out.println("I'm protectd method of A");
    }
}


package com.package2;

import com.package1.A;

public class B extends A {


    public static void main(String[] args) {

        B b = new B();
        b.m1();          // b object able to access m1

    }

}


package com.package2;

public class C {

    public static void main(String[] args) {

        System.out.println("Hi hello");
        B b = new B();
        b.m1(); //The method m1() from the type A is not visible

    }

}

超類的受保護方法在子類中是否私有?

JLS 6.6.2起。 受保護訪問的詳細信息

對象的受保護成員或構造函數只能從負責該對象實現的代碼在其中聲明該對象的包外部訪問。

令C為聲明受保護成員的類。 僅在C的子類S的主體內允許訪問。

意味着 protected修飾符指定成員只能在其自己的程序包中(與package-private一樣)訪問,並且只能由其在另一個程序包中的類的子類訪問。

Java Doc控制對類成員的訪問
在此處輸入圖片說明


因此,即使它不在同一包中,您也可以從類B訪問方法m1 ,因為它是A子類。
但是你不能訪問方法m1從類C ,因為無論它在同一個包A也沒有了它的子類A

因此,要訪問此方法,您可以將方法m1公開或將類C移到與類A相同的包中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM