在我的程序中只有两个类,一个是Parent,它是一个抽象类,有一个非静态的具体方法,void show(),现在有另一个类,Child扩展了抽象类,Parent和覆盖了show()方法。那么现在有没有办法从Child类的main方法访问抽象类的方法而不调用另一个Child类的非静态方法。
答案 0 :(得分:3)
由于Child.show()
是静态的,您必须这样做:
class Child extends Parent {
static void show() {
Child c = new Child();
c.myShow();
}
void show() {
super.show();
}
}
回答已编辑的帖子:如果没有实例,则无法调用非静态方法。如果您不能/不想创建Parent
或Child
的实例,则此情况的其他每个细节都无关紧要,因为这是不可能的。现在的问题是:你为什么要这样做?想要实现什么目标?
答案 1 :(得分:1)
这就是你要找的东西:
super.show();
虽然这只能在子类的(非静态)成员函数中起作用。
没有直接从另一个类调用重写方法的方法。你唯一的选择是让子类公开一个新的方法,除了调用父的重写方法之外什么都不做。
但是,如果您确实需要这样做,则表明您的类层次结构设计不正确......
答案 2 :(得分:1)
要访问父方法,请使用“super”为呼叫添加前缀。因此,在您的情况下使用:
super.show();
答案 3 :(得分:0)
子类总是可以使用super
关键字来访问其超类的方法。因此,在Child类中,您可以super.show();
。