根据对象的强制类型访问阴影方法

时间:2017-12-29 13:44:51

标签: java inheritance

方法调用总是根据对象的运行时类型确定,但是如何从继承实例调用基类的阴影方法?

class Base {
    String str = "base";
    String str() { return str; }
}

class Impl extends Base {
    String str = "impl";
    String str() { return str; }
}

class Test {
    public static void main(String[] args) {
        System.out.println(((Base) new Impl()).str);   // print 'base'
        System.out.println(((Base) new Impl()).str()); // print 'impl'
    }
}

例如,如上所述,如何从str()实例调用Base类的Impl方法,最好不使用反射?

1 个答案:

答案 0 :(得分:2)

使用关键字超级

访问超类成员

如果您的方法覆盖了其超类的方法之一,则可以通过使用关键字super来调用重写方法。您也可以使用super来引用隐藏字段(尽管不鼓励隐藏字段)。以下是一个例子。

public class Superclass {

    public void printMethod() {
        System.out.println("Printed in Superclass.");
    }
}

从子类

开始调用printMethod

这是一个名为Subclass的子类,它覆盖printMethod():

public class Subclass extends Superclass {

    // overrides printMethod in Superclass
    public void printMethod() {
        super.printMethod();
        System.out.println("Printed in Subclass");
    }
    public static void main(String[] args) {
        Subclass s = new Subclass();
        s.printMethod();    
    }
}

如果你想了解更多 https://docs.oracle.com/javase/tutorial/java/IandI/super.html