如何在子类中访问重写的非静态抽象类方法

时间:2011-12-02 11:06:09

标签: java override

在我的程序中只有两个类,一个是Parent,它是一个抽象类,有一个非静态的具体方法,void show(),现在有另一个类,Child扩展了抽象类,Parent和覆盖了show()方法。那么现在有没有办法从Child类的main方法访问抽象类的方法而不调用另一个Child类的非静态方法。

4 个答案:

答案 0 :(得分:3)

由于Child.show()是静态的,您必须这样做:

class Child extends Parent {
    static void show() {
        Child c = new Child();
        c.myShow();
    }

    void show() {
         super.show();
    }
}

回答已编辑的帖子:如果没有实例,则无法调用非静态方法。如果您不能/不想创建ParentChild的实例,则此情况的其他每个细节都无关紧要,因为这是不可能的。现在的问题是:你为什么要这样做?想要实现什么目标?

答案 1 :(得分:1)

这就是你要找的东西:

super.show();

虽然这只能在子类的(非静态)成员函数中起作用。

没有直接从另一个类调用重写方法的方法。你唯一的选择是让子类公开一个新的方法,除了调用父的重写方法之外什么都不做。

但是,如果您确实需要这样做,则表明您的类层次结构设计不正确......

答案 2 :(得分:1)

要访问父方法,请使用“super”为呼叫添加前缀。因此,在您的情况下使用:

super.show();

答案 3 :(得分:0)

子类总是可以使用super关键字来访问其超类的方法。因此,在Child类中,您可以super.show();