为什么 Parent Class 的静态方法隐藏在 Child Class 中?
Why static methods of Parent Class gets hidden in Child Class?
这是伪代码
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 中继承?
static
方法属于 class
而不是 class
的实例。因此,对 static
方法的调用始终使用引用类型而不是实例类型来解析。
运行时多态性仅适用于实例方法。因此,示例程序中对 m1
的以下两个调用将导致从 A
调用 m1
。
A aReferenece = new B();
A.m1();
aReference.m1();
由于实例类型在决定调用哪个方法方面没有任何作用,因此能够覆盖 static
方法是没有意义的,因为方法调用是在编译时本身解析的。
也就是说,static
方法仍然可以被继承,因此可以被子类 redefined/hidden 继承。
这是伪代码
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 中继承?
static
方法属于 class
而不是 class
的实例。因此,对 static
方法的调用始终使用引用类型而不是实例类型来解析。
运行时多态性仅适用于实例方法。因此,示例程序中对 m1
的以下两个调用将导致从 A
调用 m1
。
A aReferenece = new B();
A.m1();
aReference.m1();
由于实例类型在决定调用哪个方法方面没有任何作用,因此能够覆盖 static
方法是没有意义的,因为方法调用是在编译时本身解析的。
也就是说,static
方法仍然可以被继承,因此可以被子类 redefined/hidden 继承。