无法访问类中受保护的最终同步方法

问题描述:

这可能是一个愚蠢的问题,因为我是android编程的新手。我已经在我的Android项目中导入了一个.aar库,我试图在该库中存在的一个类中访问受保护的最终同步方法。但是,我可以参考班级中其他未同步/最终的方法。当我打开创建.aar文件的库的源代码时,我能够看到该方法,但在导入之后无法使用它。 enter image description here 请问这里有什么问题吗?无法访问类中受保护的最终同步方法

+1

https://*.com/questions/215497/in-java-difference-between-default-public-protected-and-private – shmosel

导入无关与字段和进口类的方法的可访问性和可见性,只是每次使用课程时不输入完整课程名称的快捷方式。

要访问一个导入方法字段某一类,它们之前改性剂应该被标记为公共

既然你试图访问该方法被标记为保护,该方法只能如果您正在尝试到扩展分类BaseActivity子类中访问,访问,或者如果你是从相同包的类中访问它。

解决的办法是延长BaseActivity,要么使用您的自定义方法中的方法是这样的:

public class SomeOtherActivity extends BaseActivity{ 
    public void someOtherMethod(Runnable task, long delayMillis){ 
     super.queueEvent(task,delayMills); 
    } 
} 


这样,你声明的方法提供了一个公共接口给其他开发者想要使用排队事件的方法的特定版本。

然而,这不是通过多态性也不与组成完成的,所以你可能需要确保你真正需要此方法,或者是否有其他现有的解决方案,因为是有原因的,原来的方法被标记为最终保护这可能会导致其他问题,如果不处理照顾。

介绍访问修饰符可以在这里找到:
The Java tutorials - Controlling Access to Members of a Class 在另一方面,这个问题已经没有任何关系“同步”和“最终”

介绍的关键字同步可以在这里找到:
The Java tutorials - Synchronized Methods

引言关键字最后可以在这里找到:
The Java tutorials - Final Classes and Methods

当你说“使用”你是指呼叫/调用或重写?

A.保护的方法是只对包可见和亚类

B. final方法不能被重写

A和B可以用这个方法做的唯一的事情是把它在你的子类。

+0

是的,我无法称呼它。 –

受保护的方法只能由扩展主类的类调用。

要绕过这个错误,您可以创建一个类来扩展您的BaseActivity类,然后调用一个公用方法来调用私有方法。

事情是这样的:

class MyBaseActivity extends BaseActivity { 
    public final synchronized void myQueueEvent(Runnable task, long delayMillis) { 
     super.queueEvent(task, delayMillis); 
    } 
} 

现在,您可以通过调用使用它:MyBaseActivity.myQueueEvent(...);

+1

也可以通过相同包中的类来访问它 –