Java:如何访问两个级别的父类方法?

dan*_*des 27 java inheritance

我有一个类,它扩展了我需要覆盖的类,但我需要调用该类的父类.因为我不能打电话给super因为那将执行直接父母什么是获得我父类的父母的最佳方式?

我确信这是一个基本问题,但是我已经做了一段时间了.

class A
{
 public void myMethod()
 { /* ... */ }
}

class B extends A
{
 public void myMethod()
 { /* Another code */ }
}

class C extends B
{
 I need to call Class A here
 { /* Another code */ }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 30

你不这样做:它违反了封装.

可以这么说,"不,我不想要我自己的行为 - 我想要我父母的行为",因为假设你只有在正确维护自己的状态时才这样做.

但是,您无法绕过父母的行为 - 这会阻止它强制执行自己的一致性.如果父类想要允许您直接调用祖父项方法,它可以通过单独的方法公开...但这取决于父类.


pak*_*ore 9

你不能因为它被B覆盖了.C里面没有A的实例.

问题是你要调用A类的方法,但是从哪个实例?你已经实例化了C,它是一个带有两个自己和继承方法的类.如果B重写了A的方法,你就无法从C访问它,因为方法本身属于C(不是方法) B,它已被继承,现在它在C)

可能的解决方法:

B不会覆盖 myMethod()

C接收A的实例并将其保存为类属性.

myMethod()在A中是静态的你使用A.myMethod()(我不推荐)


Rom*_*eau 6

你问的是不好的做法,你所说的是C不是B,而是A.你需要做的是让C继承A.然后你可以打电话给super.

如果不是这是唯一的方法......

public String A()
{
String s = "hello";
return s;
}

public String B()
{
String str = super.A();
return str;
}

public String C()
{
String s = super.B();
return s;
}
Run Code Online (Sandbox Code Playgroud)