A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© darkads 中级黑马   /  2014-9-12 09:55  /  1199 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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



1 个回复

倒序浏览
赞一个,可以理解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马