我遇到了一个非常奇怪的行为,我在一个包中创建了两个类aa.bb
类aa的代码
package aa.bb;
public abstract class aa {
abstract void deep();
}
Run Code Online (Sandbox Code Playgroud)
bb类代码
public class bb extends aa{
@Override
void deep() {
}
}
Run Code Online (Sandbox Code Playgroud)
现在我创建了另一个包,说bbc.cc,并在这个包中创建了一个类.
cc级代码
package bbc.cc;
import aa.bb.bb;
public class cc extends bb {
}
Run Code Online (Sandbox Code Playgroud)
现在cc类显示错误此类必须实现继承的抽象方法aa.deep(),但不能覆盖它,因为它在cc中不可见.使类型抽象或使继承的方法可见
现在创建一个包aa.bb的jar文件,并从源代码中删除aa.bb包.并在构建路径中添加了jar文件.在此之后,错误将如前所述.现在我在aa.bb包中添加了bb类的源代码并解决了错误.我不知道这背后发生了什么.
这是项目的最终目录结构
请帮我清除这个概念
发生这种情况是因为default任何方法或类的访问权限都是package level.
因此,该方法void deep()实际上对于同一包内的类是可见的aa.bb
我建议你deep()公开你的方法.
package aa.bb;
public abstract class aa {
public abstract void deep();
}
Run Code Online (Sandbox Code Playgroud)
和
public class bb extends aa{
@Override
public void deep() {
}
}
Run Code Online (Sandbox Code Playgroud)
这应该工作.
| 归档时间: |
|
| 查看次数: |
916 次 |
| 最近记录: |