父类的static会被继承但不会被覆盖,只会把父类的static方法隐藏。
实例1
public class test02 {
public static void aaa (){
System.out.println("父类静态方法执行了");
}
}
class son extends test02{
public static void main(String[] args) {
son s = new son();
son.aaa();//这个容易理解,类名.方法名可以调用静态方法
s.aaa(); //引用名.静态方法名也表示调用静态方法,
//但它应该有两个相同的aaa()方法。一个来自父类 ,
//一个来自它自己。为什么会选择调他自己的呢???
/**
* java核心思想里边解释,父类static方法不会被重写(覆盖),
* 它会被新的aaa()方法隐藏。所以s.aaa()调用的是它自己的。
*/
test02 t = new son();
t.aaa();
/**
* t是向上转型后的引用,所以t只能访问继承的或重写的方法。
* 而子类自己写的静态方法不是上面的两种情形,
* 所以t.aaa()只能调用从父类继承来的aaa()。
*/
}
public static void aaa(){
System.out.println("子类静态方法执行了");
}
}
- 运行结果
- 结论
引用名.静态方法名() 调用谁 与 “引用指向哪” 没关系,只会调用自己这个类里的静态方法。