黑马程序员技术交流社区

标题: 关于静态方法的复写 [打印本页]

作者: darkads    时间: 2014-9-12 09:55
标题: 关于静态方法的复写
我们知道静态方法是通过类来调用的,但是使用对象调用也是可以的,Eclipse中会给出警告.
假设A有静态方法print(),B继承至A,重写了该静态方法,A a = new B(),a.print()会如何工作呢?
class A {
    public void show() {
        System.out.println("show");
    }
    public static void print() {
        System.out.println("print");
    }
}

public class B extends A{
    public static void main(String[] args) {
        B b = new B();
        A a = new A();
        A aa = new B();
        
        b.show();
        a.show();
        aa.show();
        
        b.print();
        a.print();
        aa.print();
    }
    public static void print() {
        System.out.println("Test print");
    }
    public void show() {
        System.out.println("Test show");
    }
}

我们完成了两个类,来看一下输出结果:
Test show
show
Test show
Test print
print
print
前三个是非静态方法show()的返回结果,aa.show();返回了Test show说明aa实际指向了一个B对象
而后三个是静态方法print()的返回结果,aa.print();返回print说明了它调用了类A的方法
结论:静态方法跟对象没有任何关系,只跟他所属的类有关。当使用对象调用静态方法时,会调用引用类型所指向的类方法,跟对象的实际类型无关。
所以,静态方法不存在复写,它只与类相关




作者: weiyi    时间: 2014-9-12 10:12
赞一个,可以理解




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2