父类的静态方法可以被子类重写吗?

172 阅读1分钟

重写(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

由此可以得出结论,父类的静态方法是不可以被子类重写的,子类重写的静态方法不会被执行,程序会默认执行父类的静态方法。