如果类的超类都有相同的方法,如何区分要调用的超类?

时间:2013-12-10 08:55:36

标签: java

假设您有TeachingAssistantStudent延伸Person

如果StudentPerson都有方法x()并且我有TeachingAssistant的实例,那么如何区分调用学生的x()方法和人的x()方法?

super.super.x()是否有效?

2 个答案:

答案 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();
   }
}

第二选择。使用组合而不是继承。