【发布时间】:2020-08-12 07:26:45
【问题描述】:
问题
正如下面伪代码中所定义的,为什么在单独的包 (packageB) 中定义的父类 (MyCustomClassA) 的继承的公共方法 (setContentView) 尽管直接定义了公共方法却无法解析在上述父类 (myPublicMethod) 中解决了吗?
由于myPublicMethod 和setContentView 都是公共方法,我很困惑为什么一个能够解决而另一个不能。
最小示例伪代码
下面的伪代码中显示了层次结构的摘要以及描述 Android Studio 显示的工具提示和错误的 cmets:
package packageA;
public abstract class BaseClass extends Activity{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState)
setContentView(layoutID); // Tooltip shows inheritance from android.app.Activity public void setContentView(@LayoutRes int layoutResID)
}
}
package packageB;
import packageA.BaseClass
public abstract class MyCustomClassA extends BaseClass{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState)
setContentView(layoutID); // Tooltip shows inheritance from android.app.Activity public void setContentView(@LayoutRes int layoutResID)
}
}
package packageB;
import packageB.MyCustomClassA
public abstract class MyCustomClassB extends MyCustomClassA{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState)
setContentView(layoutID); // Tooltip shows inheritance from android.app.Activity public void setContentView(@LayoutRes int layoutResID)
myPublicMethod(); // Tooltip shows this resolves to packageB.MyCustomClassA
}
public void myPublicMethod() {
}
}
package packageC;
import packageB.MyCustomClassA
public abstract class MyCustomClassC extends MyCustomClassA{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState)
setContentView(layoutID); // Error: Cannot resolve method 'setContentView' in MyCustomClassC
myPublicMethod(); // Tooltip shows this resolves to packageB.MyCustomClassA
}
}
到目前为止我尝试了什么:
- 使用 Android Studio,我 Ctrl+单击父类并验证它们是否都指向正确的类。
- I Build -> Clean Project and Invalidate Caches and Restart 以确保缓存中没有任何内容过时。
- 我创建了一个虚拟类
MyCustomClassB来测试setContentView方法是否可以在同一个包中解析。它确实解决了。这让我认为这可能是一个包/受保护或其他访问问题,但由于setContentView是 Activity 中的公共方法,我无法获得其他故障排除想法。 - 阅读this、this 和this 以及其他与继承有关的内容,我阅读的所有内容进一步证实了这应该是可能的。
这可能与 gradle 有关吗?我也非常详细地浏览了项目和应用程序级别的 gradle 文件,试图消除任何可能的重复依赖项,或者可能导致混叠的事情,但除此之外,我还遇到了一些想法。关于在哪里继续寻找错误的任何其他想法,或者您能否解释为什么这从根本上不起作用(即这不是代码中的错误,而是我对继承的理解中的错误)?
【问题讨论】:
标签: java android oop inheritance