[英]What happens to protected method of a super class in base class in Java?
我的package1
有一個A
類,而package2
中的B
繼承了A
A
包含protected
方法m1
。 現在我的疑問是,當我在另一個也是package2
類C
創建對象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
}
}
超類的受保護方法在子類中是否私有?
對象的受保護成員或構造函數只能從負責該對象實現的代碼在其中聲明該對象的包外部訪問。
令C為聲明受保護成員的類。 僅在C的子類S的主體內允許訪問。
意味着 protected
修飾符指定成員只能在其自己的程序包中(與package-private一樣)訪問,並且只能由其在另一個程序包中的類的子類訪問。
因此,即使它不在同一包中,您也可以從類B
訪問方法m1
,因為它是A
子類。
但是你不能訪問方法m1
從類C
,因為無論它在同一個包A
也沒有了它的子類A
。
因此,要訪問此方法,您可以將方法m1
公開或將類C
移到與類A
相同的包中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.