2010-06-30 75 views
1
public class Cls1{ 
    public foo(){ 
     doX(); 
    } 
} 

public class Cls2{ 
    public foo(){ 
     doY(); 
    } 
} 

Cls2 cls = new Cls2(); 
cls.foo(); 

有没有办法在Java中执行继承,即当用户使用foo调用函数时,java同时运行doX和doY?Java继承追加函数而不是覆盖它

+0

这将完全违反基本的OOP原则 – skaffman 2010-06-30 18:44:33

+2

'Cls1'和'Cls2'不会相互继承,因此没有真正的关系。你到底在问什么? – Donnie 2010-06-30 18:45:49

+0

通常在扩展函数中调用base.foo()。我不知道这是否是正确的Java语法 – Andrey 2010-06-30 18:46:10

回答

5

是的,但你必须这样做明确:

public class Cls1{ 
    public foo{ 
     doX(); 
    } 
} 

public class Cls2 extends Cls1 { 
    public foo{ 
     super.foo(); 
     doY(); 
    } 
} 

注:我假设你的意思了CLS2延长CLS1,否则你的问题是没有意义的。

3
public class Cls1 { 
    public foo{ 
     doX(); 
    } 
} 

public class Cls2 extends Cls1 { 
    public foo{ 
     super.foo(); 
     doY(); 
    } 
} 

Cls2 cls = new Cls2(); 
cls.foo(); 
0

假设Cls1和以某种方式相互Cls2继承,您可以使用关键字super调用父类的实现方法,如果你想要,例如,在派生类中完成两种功能。

1
private class Cls2 extends Cls1 {  
    public void foo { 
     doY(); 
     super.foo(); 
    } 
} 
1

首先,我假设你的意思是:

public class Cls2 extends Cls1{ 

,是的,有:

public (something?) foo(){ 
    super.foo(); 
    doY(); 
} 

super关键字允许访问超类的方法。如果它只是自己调用:

super(...); 

然后它调用超类的构造函数。

0

如果doX()和doY()是静态导入的(因为它们没有在Cls1或Cls2中定义是我可以想到的这个程序编译的唯一方式),那么你可以创建一个新类用一个方法foo调用doX和doY而不使用继承。然而,名为foo的这些方法与彼此无关。