开发者

Java How to call method of grand parents? [duplicate]

This question already has answers here: Closed 10 years ago.

Possible Duplicate:

Why is super.super.method(); not allowed in Java?

Let's assume I have 3 classes A, B and C, each one extending the previous one.

How do I call the code in A.myMethod() from C.myMethod() if B also implements myMethod?

class A
{
  public void myMethod()
  {
    // some stuff for A
  }
}

class B extends A
{
  public void myMethod()
  {
    // some stuff for B
    //and than calling A stuff
    super.myMethod();
  }
}

class C extends开发者_如何学JAVA B
{
  public void myMethod()
  {
    // some stuff for C
    // i don't need stuff from b, but i need call stuff from A
    // something like: super.super.myMethod(); ?? how to call A.myMethod(); ??
  }
}


You can't. This is deliberate.

Class B provides an interface (as in the concept, not the Java keyword) to subclasses. It has elected not to give direct access to the functionality of A.myMethod. If you require B to provide that functionality, then use a different method for it (different name, make it protected). However, it is probably better to "prefer composition over inheritance".


You can't, and you shouldn't.

This is a sign of bad design. Either rename a method or include the required common functionality in another method or an utility class.


I'm not sure you can. Java makes all methods virtual by default. This means that the most simple solution will not work: Declare a variable of type A, assign your C instance to it and call myMethod will result in C.myMethod being called.

You could try to reflect type A and invoke its methods directly. It would be interesting to see what happens in this case, but I'd be surprised if the virtual dispatch wouldn't happen...

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜