我们知道静态方法是通过类来调用的,但是使用对象调用也是可以的,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的方法
结论:静态方法跟对象没有任何关系,只跟他所属的类有关。当使用对象调用静态方法时,会调用引用类型所指向的类方法,跟对象的实际类型无关。
所以,静态方法不存在复写,它只与类相关
|
|