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
,我会说你有一个设计问题。您可能在一个类层次结构中进行了太多的工作,一些功能需要放到单独的类中。对于您的情况,组合可能是比继承更好的模式。是的,一些代码将有助于澄清所要求的内容。