这是伪代码
class A
{
public static void m1()
{
System.out.println("Parent");
}
}
class B extends A
{
public static void m1()
{
System.out.println("Child");
}
}
此代码编译成功。使用@Override注释会引发编译错误。所以请解释一下方法隐藏的概念。 Parent静态方法是否在Child中继承?
答案 0 :(得分:1)
static
方法属于class
,而不属于class
的实例。因此,始终使用引用类型而不是实例类型来解析对static
方法的调用。
运行时多态仅适用于实例方法。因此,示例程序中对m1
的以下调用都将导致m1
被A
调用。
A aReferenece = new B();
A.m1();
aReference.m1();
由于实例类型在决定调用哪个方法时没有任何角色,因此能够覆盖static
方法没有意义,因为方法调用在编译时自行解决。
也就是说,static
方法仍然可以继承,因此可以由子类重新定义/隐藏。