java 静态方法重写
时间: 2023-10-11 22:24:14 浏览: 40
在Java中,静态方法是属于类的,而不是属于对象的。因此,静态方法不能像实例方法一样被重写,而是可以被隐藏。
当子类定义了一个与父类中静态方法名相同的静态方法时,父类中的静态方法就被子类中的静态方法所隐藏了。此时,如果使用父类的类型来调用该静态方法,实际上调用的是父类中的静态方法;如果使用子类的类型来调用该静态方法,实际上调用的是子类中的静态方法。
例如:
```
class A {
public static void foo() {
System.out.println("A.foo");
}
}
class B extends A {
public static void foo() {
System.out.println("B.foo");
}
}
public class Main {
public static void main(String[] args) {
A.foo(); // 输出 A.foo
B.foo(); // 输出 B.foo
A a = new B();
a.foo(); // 输出 A.foo
}
}
```
在上面的例子中,子类B中定义了一个与父类A中静态方法名相同的静态方法foo,因此父类中的foo方法被隐藏了。在main方法中,分别使用父类和子类的类型来调用foo方法,输出的结果分别是A.foo和B.foo。但是,当使用父类类型的实例a来调用foo方法时,由于静态方法是属于类的,因此实际上调用的是父类A中的foo方法,输出的结果是A.foo。