Java How to call method of grand parents? [duplicate]
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...
精彩评论