2012-06-25 65 views
1

有三个类 - Children,FatherAncestorChildren延伸FatherFather延伸Ancestor,如下图所示:Java孩子执行祖先的方法

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

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

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

如何使用祖先的test()方法在儿童test()方法?我想跳过Father的test()方法。

回答

1

你不能。 Java不允许执行诸如super.super.method()之类的操作。原因如下:this excellent answer,但底线是它违反封装。

如果功能确实是必要的,而且这样做很有意义,您可以随时在Father类中添加一个方法,该方法只调用super.test()方法,但通常这样做是不好的做法。除非你真的有一些好理由,重新考虑你的代码。实际上没有必要调用thissuper的方法。

0

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

+0

我唯一的问题就是它在大多数情况下不应该是必须的。通过提出这样的解决方案是完全有效的解决方案,您可能会留下错误的印象,认为这是一件好事。真的,你应该远离这样的事情。 –

+0

我同意在大多数情况下不需要。但是,这个问题没有给出足够的背景来提出建议。如果真的有必要,最好给出选择,恕我直言。 –

+0

我想这是真的,但虽然我的答案*提供了选项,它也防止使用这种方法,除非绝对必要。只是说。 –

相关问题