[英]Java - Unable to access protected method of superclass extended by nested class
[英]Unable to access protected final synchronized method in a class
導入與導入類的字段和方法的可訪問性和可見性無關,它只是每次使用該類時不鍵入完整類名的快捷方式。
要訪問某個類的導入方法或字段 ,應將位於它們前面的修飾符標記為public 。
由於嘗試訪問的方法被標記為protected ,因此僅當您嘗試在擴展類BaseActivity的子類中訪問該方法時 ,或者從同一包的類中訪問該方法時,才可以訪問該方法。
解決方案是擴展BaseActivity並在您的自定義方法中使用該方法,如下所示:
public class SomeOtherActivity extends BaseActivity{
public void someOtherMethod(Runnable task, long delayMillis){
super.queueEvent(task,delayMills);
}
}
這樣,您聲明的方法為想要使用排隊事件的方法的特定版本的其他開發人員提供了公共接口。
但是,這不是通過多態或通過組合來完成的,因此您可能必須確保確實需要此方法,或者是否存在其他現有解決方案,因為存在將原始方法標記為final且受保護的原因,這可能會導致其他原因。問題,如果不小心處理。
訪問修飾符的介紹可以在這里找到:
Java教程-控制對類成員的訪問另一方面,此問題與“同步”和“最終”無關
您可以在此處找到關鍵字sync的介紹:
Java教程-同步方法
關鍵字final的介紹可以在這里找到:
Java教程-最終類和方法
當您說“使用”時,您的意思是呼叫/調用或覆蓋?
A.受保護的方法僅對包和子類可見
B.最終方法不能被覆蓋
對於A和B,使用該方法唯一可以做的就是在子類中調用它。
受保護的方法只能由擴展主類的類調用。
要繞過您遇到的錯誤,可以創建一個擴展BaseActivity
類的類,然后創建一個調用私有方法的公共方法。
像這樣:
class MyBaseActivity extends BaseActivity {
public final synchronized void myQueueEvent(Runnable task, long delayMillis) {
super.queueEvent(task, delayMillis);
}
}
現在,您可以通過以下方式使用它: MyBaseActivity.myQueueEvent(...);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.