我是 Java 新手,并且掌握了受保護的可見性。
我有 A 類,它具有以下受保護的方法 method1 -
public abstract class A {
public A(...){}
protected void method1(){
// do something
}
現在我有另一個 B 類,它擴展了一個不同的 C 類。B 類有一個嵌套的靜態類,D 類擴展了 A 類
public class B extends C {
public B(...){
super(...);
}
private static class D extends A {
D(...){super(...);}
}
public void method2() {
D record = new D();
record.method1(); // need to access the protected method1 of class A, which is the superclass of nested class D. Getting the error here
}
}
我收到此錯誤 - method1 在 A 類中具有受保護的訪問權限現在我的問題是如何訪問 method1?我無法在 A 類中將其更改為公開
uj5u.com熱心網友回復:
您需要在 D 類中創建一個代理方法,如下所述。D類可以訪問A類的受保護方法,但D類的實體不能直接呼叫受保護方法,必須有代理方法才能呼叫超類的受保護方法。
在 D 類中,您需要為 A 類中的方法創建一個公共 getter,因此:
public class A {
protected void protectedMethod() {}
}
public class D extends A {
public void callProtectedMethod() {
super.protectedMethod();
}
}
final D record = new D();
record.callProtectedMethod();
uj5u.com熱心網友回復:
由于 A.method1() 受到保護,因此只能從 A 的同一個類/同一個包/子級訪問它。
在您的代碼中,您在 B 中呼叫 A.method1(),如果 B 與 A 不在同一個包中,則無法訪問
解決方案是使用包裝器作為@Alex Ander 或將 A.method1() 的修飾符更改為 public

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/489675.html
下一篇:指向子與父的函式指標
