方法重写和方法隐藏有什么区别?

时间:2019-10-13 10:52:45

标签: java static overriding

嗯,我了解到方法重写是在非静态方法中完成的,而方法隐藏是在静态方法中完成的。那么,如果在方法中重写子类的方法而在父类方法中重写,从而仅执行属于子类的方法,那么它们之间有什么区别?

在隐藏方法的同时,子类方法隐藏了父类方法,以便仅子类方法正在执行?

在代码中,我在下面提供了两个程序的输出相同的信息,所以覆盖和隐藏之间有什么区别。

a pic featuring code

another pic featuring code

1 个答案:

答案 0 :(得分:0)

可以通过已经提到的@SMA代码看到差异:

public static final void main(String... strings) {
    final Child obj = new MainClass.Child();
    obj.f1();
    final Parent p = obj;
    p.f1();
}

将导致:
儿童班
儿童班

静态替代方法将导致:
儿童班
家长班

因此,在重载情况下,只能再从重载方法中调用父方法。而在静态情况下,隐藏方法仍然存在,并且在使用相应的上下文(因此为父类)时将被调用。
(我知道通过类的实例调用静态方法不是一个好习惯,但这有助于说明此问题的答案。)