Java 中可以重载或覆盖静态方法吗?
如果一个类有多个名称相同但参数不同的函数,则称为方法重载。如果子类提供了其父类已提供的某个方法的具体实现,则称为方法覆盖。
方法重载提高了程序的可读性。方法覆盖提供了其超类参数在重载的情况下必须不同,在覆盖的情况下必须相同的方法的具体实现。
现在考虑静态方法的情况,那么静态方法在重载和覆盖方面有以下规则。
可以通过另一个静态方法重载。
不能被子类中的另一个静态方法覆盖。其背后的原因是子类只隐藏了静态方法,而不是覆盖它。
示例
以下示例演示了这一点。
class SuperClass { public static void display() { System.out.println("SuperClass.display()"); } //Method overloading of static method public static void display(int a) { System.out.println("SuperClass.display(int): " + a); } } class SubClass extends SuperClass { //Not method overriding but hiding public static void display() { System.out.println("SubClass.display()"); } } public class Tester { public static void main(String[] args) { SuperClass object = new SubClass(); //SuperClass display method is called //although object is of SubClass. object.display(); object.display(1); } }
输出
SuperClass.display() SuperClass.display(int): 1
注意
静态方法在编译时解析,不能被子类覆盖。实例方法在运行时解析,可以被覆盖。
静态方法可以重载。
广告