【问题标题】:Is there a way to invoke the parent of a parent in Java [duplicate]有没有办法在Java中调用父级的父级[重复]
【发布时间】:2015-05-31 20:26:26
【问题描述】:
(只是一个理论问题,我没有看到直接的实际用途)
有没有办法做类似的事情:
super.super.someMethod()
在 Java 中?
super.someMethod()
存在,为什么不能调用超类的超类?
(当然可以创建方法:
protected void someSuperMethod(){
super.someMethod();
}
在超类中并在子类中调用它具有相同的效果,但是有没有直接的方法可以做到这一点,如果没有,为什么?)
S.
【问题讨论】:
标签:
java
inheritance
theory
【解决方案1】:
有一些丑陋的解决方法,但不应该使用它们,因为这是不好的做法。
当你从一个对象继承时它是好的,但你不应该能够直接访问这个对象的父对象,因为改变它的行为也可能改变你的第一个父对象的行为。
您提出的解决方法很好,因为它是在父级本身中定义的方法,因此它不会改变行为,因为父级访问它自己的父级本身而不是子级访问它的祖父母首先绕过它父母。
这主要是为什么没有直接的方法来做到这一点。如果您想访问祖父母中的某些内容,则应改为在第一个父母中完成,而在您的孩子中,您告诉父母访问它的父母。
假设您定义了一个 A、B 和 C 类型的 Object。
- B 扩展 A,C 扩展 B。
- A 和 B 的方法相同,但验证方式不同。
- 由于 C 扩展了 B,调用该方法应使用 B 的验证,而不是 A。
- 使用 super.super,您可以直接调用 A 中的方法并跳过 B 的验证,这会破坏继承安全/规则。