Java 如果等级为';s的超类都有相同的方法,如何区分调用哪个超类?
假设你有一个Java 如果等级为';s的超类都有相同的方法,如何区分调用哪个超类?,java,Java,假设你有一个讲师谁扩展了学生谁扩展了人 如果Student和Person都有一个方法x(),并且我有一个TeachingAssistant的实例,我如何区分调用Student的x()方法和Person的x()方法 super.super.x()是一个有效的调用吗?以下代码中有很多错误的想法: package supersuper; import static java.lang.System.out; interface Human { String x(); } class P
讲师
谁扩展了学生
谁扩展了人
如果Student
和Person
都有一个方法x()
,并且我有一个TeachingAssistant
的实例,我如何区分调用Student的x()
方法和Person的x()
方法
super.super.x()
是一个有效的调用吗?以下代码中有很多错误的想法:
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()
我只向您介绍这一点,让您开始完善您的问题。首先重新思考您的类层次结构是否真的与问题域匹配。如果仍然需要专门调用父级中重写的方法的祖级实现,则有2种选择: 第一选择。在外祖父母中添加别名方法
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();
}
}
第二选择。使用组合而不是继承 如果你真的需要
super.super
,我会说你有一个设计问题。您可能在一个类层次结构中进行了太多的工作,一些功能需要放到单独的类中。对于您的情况,组合可能是比继承更好的模式。是的,一些代码将有助于澄清所要求的内容。