从JAVA中的子类调用超类中的重写函数

时间:2013-09-26 16:17:41

标签: java subclass superclass

假设我有两个类A和B,其中A是B的超类。现在,我在两个类中编写一个函数(override),说funct()。然后,如果我想从B的对象中调用A中的funct(),是否可能?

3 个答案:

答案 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();
    }
}