覆写是针对非静态方法,不能针对静态方法。
public class Base {
public static void doSth() {
System.out.println("Base:Sth");
}
public void doAnyth() {
System.out.println("Base:Any");
}
}public class Sub extends Base {
public static void doSth() {
System.out.println("Sub:Sth");
}
public void doAnyth() {
System.out.println("Sub:Any");
}
}public class Client {
public static void main(String[] args) {
Base base = new Sub();
Sub sub = new Sub();
base.doAnyth();
base.doSth();
Sub.doSth();
sub.doAnyth();
sub.doSth();
}
}---
Sub:Any
Base:Sth
Sub:Sth
Sub:Any
Sub:Sth非静态方法,是根据对象的实际类型来执行的。
静态方法,如果是类调用,根据类名来选择方法,如果是对象调用,根据对象的实际类型来调用方法。
in all,用对象调用静态方法、属性的习惯不是很好,给代码带来了"坏味道"。