Java:覆盖祖父母的方法

时间:2014-12-19 11:19:38

标签: java

我有一个抽象类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() {
     ...
     ..
    }
} 

4 个答案:

答案 0 :(得分:1)

Sub类的

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)

如果您可以直接访问祖父母,则会对父亲的实现产生依赖,这将违反封装。