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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 四顾行者 中级黑马   /  2014-6-14 23:21  /  1311 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

父类子类中都有一个相同的静态方法func(),Fu fu=new zi();然后运用多态调用这个静态方法。
fu.func();结果调用的是父类的静态方法。
谁能从原理上解释解释?

4 个回复

倒序浏览
静态方法编译运行看左边就这么一句话
回复 使用道具 举报
static修饰的静态方法不能被覆盖以及重写!

Fu fu=new zi();其中,fu的类型是Fu,所以fu.func()调用的是Fu中的func()方法,相当于Fu.func()。

如果是这样:Zi zi = new Zi();   这时,zi的类型是Zi,所以zi.func()调用的将是Zi里面的func()方法,相当于Zi.func()。

希望对你有所帮助。能力有限,若有出错的地方请指教!

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
父类的调用父类的, 子类的调用子类的,static方法不能被覆盖的= =
回复 使用道具 举报
本帖最后由 3盐酸1硝酸 于 2014-6-15 15:25 编辑

多态中可以将static 修饰的方法(静态方法)看做是姓氏(以毕老师讲的例子:子类是毕老师,父类是毕老师的父亲(这里就称为毕姥爷了)),方法体是名字。
Zi 中的func方法,你可以看做和父类中的方法是一样的,只不过是名字不一样。只要是毕姥爷的子女肯定姓毕,姓氏是不可以修改的了。也就是所静态方法不可以被重写和覆盖。 Fu fu=new Zi(); fu.func();相当于毕老师以毕姥爷的形式存在, 在调用姓时,调用毕姥爷的就可以了。所以fu.func(),调用的是父类中的方法。
在内存中,静态方法是在类加载的时候就已经存在的,就相当于姓氏,人一出生的他的姓氏都已经确定了。
我也是初学者,这只是我对多态中“静态方法”的理解。理解不了就死记毕老师讲的就行了。自己将多态的各种形式写写,运行运行。有助于理解和记忆。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马