我有一个抽象类A,一个抽象类B继承A. 然后,我有一个继承B的C类(不是抽象的)
我需要覆盖一些在A中声明为abstract的方法,而不是在B中实现以在C中实现。
但是当我尝试这样做,并在我的方法之上添加覆盖注释时,它表示它无效,因为父方法中不存在该方法。
我该怎么做?
带签名的代码:
public abstract class A {
abstract protected EntityType getEntityType();
abstract protected ActionResponse doProcessing();
}
public abstract class B extends A {
@Override
EntityType getEntityType() {
....
...
}
}
public class C extends B {
@Override
ActionResponse doProcessing() {
...
..
}
}
答案 0 :(得分:1)
Access Modifier
不能比Super Class
弱。最好从Access Modifier
protected
更改为default
答案 1 :(得分:0)
A:
public abstract class A {
public abstract D getClassD();
}
B:
public abstract class B extends A{
}
D:
public class D {
}
和C:
public class C extends B {
D d = new D();
@Override
public D getClassD() {
return this.d;
}
}
这是对的。如果没有覆盖方法getClassD(),则无法创建C类。
请添加字段并初始化它。 如果您使用Eclipse,则可以更改IDE应该放置@Override的设置
答案 2 :(得分:0)
您的方案在JavaSE 1.7中运行良好。您使用的是哪个版本的Java?
public abstract class A {
protected abstract Integer getMyInt();
protected abstract String getMyString();
}
public abstract class B extends A {
@Override
protected String getMyString(){
return "The answer is";
}
}
public class C extends B {
@Override
protected Integer getMyInt() {
return 42;
}
}
public class Test {
public static void main(String[] args) {
C c = new C();
System.out.println(c.getMyString() + " " + c.getMyInt());
}
}
答案 3 :(得分:0)
如果您可以直接访问祖父母,则会对父亲的实现产生依赖,这将违反封装。