2 jhon2015 Jhon2015 于 2016.01.19 19:21 提问

【急】关于static的一个小问题

一道题目,见图。为什么答案是1211,而不是1231.是接口中的static 和final修饰符怎么
样的过程道理得出的结果能说说吗图片说明

4个回答

caozhy
caozhy   Ds   Rxr 2016.01.19 19:36
已采纳

这个问题的关键在于理解你的类中有两个mode,一个是从接口继承来的,一个是从基类继承来的,同名的字段,到底输出的是哪一个。
java采取的是就近原则,如果本类型有,基类型也有,那么选择本类型的。继承的基类的方法,看不到派生类定义的mode,所以用的还是接口的mode,所以是1不是3。
最后一个,接口的优先级高于基类。

Jhon2015
Jhon2015 还有那个接口和基类的优先级的问题能扩展说一下吗。谢谢啦
接近 2 年之前 回复
caozhy
caozhy 回复Jhonme: 只是因为你基类有个同名的成员,你掩盖了这个问题。
接近 2 年之前 回复
caozhy
caozhy 回复Jhonme: 任何情况下,基类都不可能得到派生类定义的成员
接近 2 年之前 回复
Jhon2015
Jhon2015 这里不是很懂。
接近 2 年之前 回复
Jhon2015
Jhon2015 为什么会看不到派生类定义的mode了
接近 2 年之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.19 19:38

这个很static没有关系,主要是因为P3的play方法是继承于父类的,所以父类方法访问的MODE变量也是父类的1,所以结果就是这个了。通常父类很子类有相同名称的成员变量时,各自方法中访问的变量是各自的。

Jhon2015
Jhon2015 很好解决我的问题了。谢谢
接近 2 年之前 回复
Jhon2015
Jhon2015 谢谢~
接近 2 年之前 回复
qq_28394425
qq_28394425   2016.01.20 14:33

难道不是1212吗?第四个属性继承了啊

Jhon2015
Jhon2015   2016.02.02 14:11

是1212,你说的对

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!