假设您有TeachingAssistant
人Student
延伸Person
。
如果Student
和Person
都有方法x()
并且我有TeachingAssistant
的实例,那么如何区分调用学生的x()
方法和人的x()
方法?
super.super.x()
是否有效?
答案 0 :(得分:0)
以下代码中有许多不好的想法:
package supersuper;
import static java.lang.System.out;
interface Human {
String x();
}
class Person implements Human {
public String designation; //bad idea
Person() {
designation = x();
}
@Override
public String x() {
return "Person";
}
}
class Student extends Person {
Student() {
super();
}
@Override
public String x() {
return "Student";
}
}
class TeachingAssistant extends Student {
TeachingAssistant() {
super();
}
}
public class SuperSuper {
public static void main(String[] args) {
TeachingAssistant ta = new TeachingAssistant();
out.println(ta.designation);
}
}
不知道你想要什么,真的。发布一些代码作为某些上下文的起点。但是,不,你不能根据评论调用super.super.x()。
我只向您提出此问题,让您开始改进您的问题。
答案 1 :(得分:0)
首先重新考虑您的类层次结构是否真正与问题域匹配。如果你仍然需要专门调用祖父母在父母中重写的方法的实现,你有两个选择:
首选。在祖父母中添加别名方法。
class grandPa {
int foo() {
return myfoo;
}
// Alias method
int grandPaFoo() {
return foo();
}
}
class Pa extends grandPa {
int foo() {
return bar;
}
}
class Child extends Pa {
int foo() {
if (x>3) {
// User parent implementation
super.foo();
} else {
// User grandparent implementation via alias
grandPaFoo();
}
}
第二选择。使用组合而不是继承。