假设我有两个类A和B,其中A是B的超类。现在,我在两个类中编写一个函数(override),说funct()。然后,如果我想从B的对象中调用A中的funct(),是否可能?
答案 0 :(得分:2)
class A {
public void f() {...}
}
class B extends A {
@Override public void f() { super.f(); }
}
这就是你想要的吗?
如果您希望直接在类型B的实例上调用A#f()
,则必须为其提供占位符函数:
class B extends A {
@Override public void f() { ... }
public void superF() { super.f(); }
}
new B().f(); // calls B#f();
new B().superF(); // calls A#f();
答案 1 :(得分:1)
我有这种情况的技巧,使用funct()方法中的Flag参数以不合逻辑的方式操作它:D,像这样:
class A {
public void funct(boolean callSuper) {
// avoid using callSuper arg here
}
}
class B extends A {
@Override
public void funct(boolean callSuper) {
if (callSuper) {
super.funct(callSuper);
return;//if return type is void
} else {
//do here the functionality if the flag is false
}
}
}
或
class A {
public void funct() {
}
}
class B extends A {
private boolean callSuper = false;
@Override
public void funct() {
if (callSuper) {
super.funct(); // call A.funct() functionality
setCallSuper(false);
} else {
//do here the functionality of B.funct() if the flag is false
}
}
public void setCallSuper(boolean callSuper){
this.callSuper = callSuper;
}
}
答案 2 :(得分:0)
给出类似
的类class A {
public void funct() {...}
}
class B extends A {
@Override
public void funct() {...}
}
你问
然后,如果我想从B的对象中调用A中的funct(),那就是它 可能的?
所以我们来看看
B b = new B();
b.funct();
A a = b;
a.funct();
((A)b).funct();
由于多态性和后期绑定,以上都做同样的事情。
调用超类的实现的唯一方法是通过super
关键字获取对该成员的引用。
class A {
public void funct() {...}
}
class B extends A {
@Override
public void funct() {
super.funct();
}
}