在Java中非静态方法可以被子类重写,但是静态方法是不能被子类重写的。虽然写完不会报错,但是这样所谓的“重写”是不具备多态的。
public class Person {
public static void say() {
System.out.println("hi");
}
}
class Student extends Person{
public static void say() {
System.out.println("hello");
}
}
class test11 {
public static void main(String[] args) {
Student student = new Student();
student.say();
Person person = new Student();
person.say();
}
}
输出:
hello
hi
可以看到,当用一个Student的引用去指向一个Student对象时,这个时候去调用say方法输出是正常的hello,但是当向上转型之后,再去调用say方法的时候,输出的却是hi,说明调用是父类的say方法,所以没用动态绑定。这时候父类和子类的两个say方法是相互独立的方法,所以静态方法不能被重写。