为什么父类的静态方法隐藏在子类中?
问题描述:
这是伪代码为什么父类的静态方法隐藏在子类中?
class A
{
public static void m1()
{
System.out.println("Parent");
}
}
class B extends A
{
public static void m1()
{
System.out.println("Child");
}
}
此代码编译成功。拥有@Override注释会引发编译错误。所以请解释有关方法隐藏的概念。 父级静态方法是否在Child中继承?
答
A static
方法属于class
而不是class
的实例。由于这个原因,对static
方法的调用总是使用引用类型而不是实例类型来解析。
运行时多态只适用于实例方法。因此,示例程序中以下对m1
的调用将导致调用A
的m1
。
A aReferenece = new B();
A.m1();
aReference.m1();
由于实例类型没有任何作用,在决定哪些方法被调用,能够覆盖一个static
方法玩是没有意义的,因为该方法调用是在编译时自筹解决。
也就是说,static
方法仍然可以被继承,因此被子类重新定义/隐藏。
静态方法属于一个类。它们是继承的,但不能被覆盖。 – CKing
请解释概念 –
阅读此https://docs.oracle.com/javase/tutorial/java/IandI/override.html – Rohan