嗯,我了解到方法重写是在非静态方法中完成的,而方法隐藏是在静态方法中完成的。那么,如果在方法中重写子类的方法而在父类方法中重写,从而仅执行属于子类的方法,那么它们之间有什么区别?
在隐藏方法的同时,子类方法隐藏了父类方法,以便仅子类方法正在执行?
在代码中,我在下面提供了两个程序的输出相同的信息,所以覆盖和隐藏之间有什么区别。
答案 0 :(得分:0)
可以通过已经提到的@SMA代码看到差异:
public static final void main(String... strings) {
final Child obj = new MainClass.Child();
obj.f1();
final Parent p = obj;
p.f1();
}
将导致:
儿童班
儿童班
静态替代方法将导致:
儿童班
家长班
因此,在重载情况下,只能再从重载方法中调用父方法。而在静态情况下,隐藏方法仍然存在,并且在使用相应的上下文(因此为父类)时将被调用。
(我知道通过类的实例调用静态方法不是一个好习惯,但这有助于说明此问题的答案。)