[编写高质量代码:改善java程序的151个建议]建议33:不要覆写静态方法

覆写是针对非静态方法,不能针对静态方法。

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,用对象调用静态方法、属性的习惯不是很好,给代码带来了"坏味道"。
posted @ 2013-12-09 08:31  akingseu  阅读(191)  评论(0编辑  收藏  举报