我有3个类以下配置: Class1有一些方法,其中一些是抽象的:
package package1;
public abstract class class1{
protected abstract void methodX();
public boolean methodY(){
//method implementation
}
public String thisIsTheMethodThatMatters(){
//method implementation
}
}
接下来,来自同一个包的class2扩展了class1,覆盖了它的抽象方法并添加了一些其他方法:
package package1;
public class class2 extends class1{
@Override
protected final void methodX(){
//method implementation
}
public boolean methodZ(){
//method implementation
}
}
最后,来自不同包的class3扩展了class2并覆盖了class1的方法:
package package2;
import package1.class2;
public class class3 extends class2{
@Override
public String thisIsTheMethodThatMatters(){
//method implementation
}
}
我正在使用Eclipse,它在编码时没有检测到任何错误。 我正在使用Maven Build构建项目,但是构建失败,说这就是TheMethodThatMatters()没有覆盖或实现超类型的方法 我确保package1是在package2之前构建的,因此我不认为问题存在。
答案 0 :(得分:0)
如果您在class1中使用protected作为访问修饰符定义了方法(thisIsTheMethodThatMatters),则会发生这种情况。换句话说,如果方法的签名是
protected String thisIsTheMethodThatMatters()
然后你会得到错误,因为这个方法不会被class3继承,基于上面的场景