由于刚使用掘金懒得琢磨,运行结果就直接打出来了,没有插图大家可以自己跑一遍
//SuperDemo.java
public class SuperDemo {
public static int a=5;
public static void print(){
System.out.println("父类中的静态方法");
}
}
//SonDemo.java
public class SonDemo extends SuperDemo { }
//Run.java
public class Run {
public static void main(String[] args) {
SonDemo.print();
System.out.println(""+SonDemo.a);
}
}
//result:
//父类的静态方法
//5
可见,静态域和静态方法是可以被继承的,子类能继承父类的所有方法(不包含构造方法,构造方法只能显式和隐式调用)和数据域,但是不能调用private的。
利用多态下的方法的动态绑定来说明static域和方法能否被重写。
//SuperDemo.java
public class SuperDemo {
public static int a=5;
public static void print(){
System.out.println("父类中的静态方法");
}
}
//SonDemo.java
public class SonDemo extends SuperDemo {
public static int a=6;
public static void print(){
System.out.println("子类中的静态方法");
}
}
//Run.java
public class Run {
public static void main(String[] args) {
SuperDemo one=new SonDemo();
one.print();
System.out.println(""+one.a);
}
}
//result:
//父类的静态方法
//5
重写和隐藏的区别是:"重写"后子类的优先级要高于父类的优先级,但是“隐藏”是没有这个优先级之分的。
静态域、静态方法和非静态域都可以被继承和隐藏而不能被重写,因此不能实现多态,不能实现父类的引用可以指向子类的对象时的动态绑定。非静态方法可以被继承和重写,因此可以实现多态。
总结:
- 静态域和静态方法可以被继承。
- 静态方法和静态域不可以被重写,不能实现多态。