public class Cls1{
public foo(){
doX();
}
}
public class Cls2{
public foo(){
doY();
}
}
Cls2 cls = new Cls2();
cls.foo();
有没有办法在Java中执行继承,即当用户使用foo调用函数时,java同时运行doX和doY?Java继承追加函数而不是覆盖它
public class Cls1{
public foo(){
doX();
}
}
public class Cls2{
public foo(){
doY();
}
}
Cls2 cls = new Cls2();
cls.foo();
有没有办法在Java中执行继承,即当用户使用foo调用函数时,java同时运行doX和doY?Java继承追加函数而不是覆盖它
是的,但你必须这样做明确:
public class Cls1{
public foo{
doX();
}
}
public class Cls2 extends Cls1 {
public foo{
super.foo();
doY();
}
}
注:我假设你的意思了CLS2延长CLS1,否则你的问题是没有意义的。
public class Cls1 {
public foo{
doX();
}
}
public class Cls2 extends Cls1 {
public foo{
super.foo();
doY();
}
}
Cls2 cls = new Cls2();
cls.foo();
假设Cls1
和以某种方式相互Cls2
继承,您可以使用关键字super
调用父类的实现方法,如果你想要,例如,在派生类中完成两种功能。
private class Cls2 extends Cls1 {
public void foo {
doY();
super.foo();
}
}
首先,我假设你的意思是:
public class Cls2 extends Cls1{
,是的,有:
public (something?) foo(){
super.foo();
doY();
}
super关键字允许访问超类的方法。如果它只是自己调用:
super(...);
然后它调用超类的构造函数。
如果doX()和doY()是静态导入的(因为它们没有在Cls1或Cls2中定义是我可以想到的这个程序编译的唯一方式),那么你可以创建一个新类用一个方法foo调用doX和doY而不使用继承。然而,名为foo的这些方法与彼此无关。
这将完全违反基本的OOP原则 – skaffman 2010-06-30 18:44:33
'Cls1'和'Cls2'不会相互继承,因此没有真正的关系。你到底在问什么? – Donnie 2010-06-30 18:45:49
通常在扩展函数中调用base.foo()。我不知道这是否是正确的Java语法 – Andrey 2010-06-30 18:46:10