重写(Override)是Java的特性之一,面试也常常被问到,前几天的一场面试,面试官就问了这么一个问题。
我虽然已经了解 重写 和 静态 这两块知识,但是组合在一起,我还是没有答出来。
重写
首先什么是重写?
Java中类的继承特性可以产生一个子类,子类继承父类就拥有了父类的非私有属性,子类可以对父类的方法进行扩展,以增强自己的功能,这就是重写。
那么父类的静态方法可以被子类重写吗?
本着实践出真知的想法,我们就写个程序看看。
首先编写一个父类SuperClass
public class SuperClass {
public static void staticMethod(){
System.out.println("SuperClass:静态方法");
}
public void method(){
System.out.println("SuperClass:一般方法");
}
}
再编写一个子类ChildClass
public class ChildClass extends SuperClass{
public static void staticMethod(){
System.out.println("ChildClass:静态方法");
}
public void method() {
System.out.println("ChildClass:一般方法");
}
}
再通过main()方法创建子类对象,调用子类的静态方法和一般方法
public class Main {
public static void main(String args[]) {
SuperClass superClass = new ChildClass();
superClass.method();
superClass.staticMethod();
}
}
输出结果:
ChildClass:一般方法
SuperClass:静态方法
Process finished with exit code 0
由此可以得出结论,父类的静态方法是不可以被子类重写的,子类重写的静态方法不会被执行,程序会默认执行父类的静态方法。