Java子进程执行祖先的方法

时间:2012-06-25 03:38:25

标签: java inheritance extends

有三个类 - ChildrenFatherAncestorChildren扩展FatherFather扩展Ancestor,如下所示:

public class Ancestor {
    public void test() {
    }
}

public class Father extends Ancestor {
    @Override
    public void test() {
    }
}

public class Children extends Father {
    @Override
    public void test() {
    }
}

如何在Children的test()方法中使用Ancestor的test()方法?我想跳过Father的test()方法。

2 个答案:

答案 0 :(得分:1)

你做不到。 Java不允许执行super.super.method()之类的操作。其中的原因在this excellent answer中列出,但最重要的是它违反了封装。

如果功能确实是必要的,并且做这样的事情是有道理的,你总是可以在Father类中添加一个只调用super.test()方法的方法,但做这样的事情通常是不好的做法。除非您有一些真正的良好的推理,否则请重新考虑您的代码。实际上不应该从thissuper调用方法。

答案 1 :(得分:0)

简短的回答是,你做不到。它违反了封装,通常是不好的做法。实现你想要的更好的方法是使Ancestor.test()抽象并有一个新的受保护的方法,如Ancestor.baseTest();然后,您可以从Father,Child和任何其他想要访问逻辑的子类调用Ancestor.baseTest()。