2014-03-12 59 views
2

我有A类,其方法sum()调用超类方法

现在类B延伸A类和覆盖sum()方法,和

C延伸B类和也覆盖sum()方法。

现在我创建一个类C的实例。

我的问题是:如何在类CC实例中如何调用类Asum()方法?其中一种方式是在BC中拨打super.sum()。有没有其他方法?

+0

一个obj = new C();然后调用方法obj.sum();或者使用super来调用该方法 – Kick

+0

不,根据http://stackoverflow.com/questions/3456177/calling-super-super-class-method –

+0

的接受答案您创建了C类实例的位置? – Sudz

回答

1

有CAL的没有语法方式林志玲方法A.sum()C的任何方法内您需要将一个桥接 B法里面做这件事:

public class A { 
    public void sum() { System.out.println("A.sum()"); } 
} 

public class B extends A { 
    @Override 
    public void sum() { System.out.println("B.sum()"); } 
    protected final void superSum() { super.sum(); } 
} 

public class C extends B { 
    @Override 
    public void sum() { System.out.println("C.sum()"); } 
    public void someMethod() { 
     sum(); 
     super.sum(); 
     superSum(); 
    } 
} 

调用C.someMethd()打印出

C.sum() 
B.sum() 
A.sum() 
1

B里面的& C的sum方法放置super(),这样它会调用A的sum方法。

B extends A{ 
sum(){ 
super(); 
//dosomething.. 
} 
} 
+0

看到我编辑的问题... – RuntimeException

1

您可以使用super.sum()调用的总和B中,但我不觉得你能做到这一点从C.

最好的办法是打电话super.sum()在两个B的ANC C'S总和

+0

看到我编辑的问题... – RuntimeException

1

你可以尝试这样的:

class A{ 
    public void method() { 
     System.out.println("a"); 
    } 
} 
class B extends A { 
    public void method() { 
     System.out.println("b"); 
    } 
    public void callmethod(){ 
     super.method(); 
    } 
} 
class C extends B { 
    public void method() { 
     System.out.println("c"); 
    } 
    public void callmethod(){ 
     super.callmethod(); 
    } 
} 
public class Test { 

public static void main(String[] args) { 
    C c = new C(); 
    c.callmethod(); 
} 

}