2017-10-29 350 views
1

这是伪代码为什么父类的静态方法隐藏在子类中?

class A 
{ 
    public static void m1() 
    { 
    System.out.println("Parent"); 
    } 
} 

class B extends A 
{ 
    public static void m1() 
    { 
    System.out.println("Child"); 
    } 
} 

此代码编译成功。拥有@Override注释会引发编译错误。所以请解释有关方法隐藏的概念。 父级静态方法是否在Child中继承?

+2

静态方法属于一个类。它们是继承的,但不能被覆盖。 – CKing

+0

请解释概念 –

+1

阅读此https://docs.oracle.com/javase/tutorial/java/IandI/override.html – Rohan

回答

0

A static方法属于class而不是class的实例。由于这个原因,对static方法的调用总是使用引用类型而不是实例类型来解析。

运行时多态只适用于实例方法。因此,示例程序中以下对m1的调用将导致调用Am1

A aReferenece = new B(); 
A.m1(); 
aReference.m1(); 

由于实例类型没有任何作用,在决定哪些方法被调用,能够覆盖一个static方法玩是没有意义的,因为该方法调用是在编译时自筹解决。

也就是说,static方法仍然可以被继承,因此被子类重新定义/隐藏。

相关问题