多接口重名常量

多接口重名常量

问题描述:

老师,您好!如图,当类Person的父类A中存在和接口B、C重名的常量,我使用接口仍然可以调用B、C中的常量i并没有出现无法自动解析这个重名常量,那为什么和视频里不一样,还要在子类中定义独有的变量成员?

https://img1.sycdn.imooc.com//climg/6316b24c09cc465618520878.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好~

1.接口中的属性,无论是否完整书写修饰符,它的修饰符都是“public static final”的,所以任何情况下,都可以通过静态的语法去进行访问,即通过“接口名.属性名”的形式。

所以同学代码中使用接口名去访问时,与是否存在重名是无关的。

2.由于子类会继承父类或者父接口中的属性,所以如果父类与父接口中都没有定义重名的属性时,子类是可以通过继承的语法去访问该属性。

3.当父类与父接口,或多个父接口间存在重名的变量时,就不能直接使用继承的语法去访问了,必须通过指定属性来源的方式去访问:

(1)指定属性来源于父接口的语法是:通过静态的方式访问父接口的属性,即通过“接口名.属性名”的形式。

(2)指定属性来源于父类,并且该属性不是静态的,语法是:通过super关键字去访问,即通过“super.属性名”的形式。

(3)指定属性来源于父类,并且该属性也是静态的,语法是:可以通过super关键字去访问,但是不建议这样做,而是建议通过静态的方式去访问,即通过“类名.属性名”的形式。

综上所述,当父类或父接口中存在重名属性时,子类必须指定属性的来源。但是并不要求子类必须定义同名的属性。

祝学习愉快~

  • hor5 提问者 #1

    老师(3)后面是不是说错了,不建议用super调用静态属性,应该通过类调用静态属性。

    但是为什么教学里会给出“父类中的常量和接口的常量重名的时候,在子类里也是无法自动解析的,解决方案是在子类中定义它独有的变量成员”这样的说法?

    2022-09-06 11:37:30
  • 好帮手慕小蓝 回复 提问者 hor5 #2

    同学你好,上面确实是笔误,已经修改了。

    课程中的描述不完整,因为如果不想使用上述的指定的语法的话,而是直接使用属性名,就必须定义属于自己的变量了,因为这样默认是访问本类的属性。

    但是如果只是为了解决重名问题,上面的解决方案会更加完整。

    祝学习愉快~

    2022-09-06 12:43:31
  • hor5 提问者 回复 好帮手慕小蓝 #3

    好的,谢谢老师!

    2022-09-06 13:03:34
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师