使用接口引用调用常量和静态方法

使用接口引用调用常量和静态方法

在课程5-7里,在接口里写了public static final int TEMP=20,和默认的connection方法,还有tatic void stop的静态方法,在测试类里:

INet net=new SmartWatch();

System.out.println(net.TEMP);//结果是20

net.connection();//调用的是接口的方法

而net.stop()就是错误的,为什么?接口的常量TEMP都能调,而静态方法stop怎么调用不了?

正在回答 回答被采纳积分+1

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

2回答
好帮手慕小班 2019-06-09 14:46:59

同学你好,1、在这里connection方法是默认方法,是在接口中使用default修饰的默认方法,当实现INet方法时,不用像接口中的普通方法一样,需要实现重写,它可以直接调用哦!

2、同理 connection与TEMP都是不变的,所以作为接收的引用对象,可以直接调用哦!

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~


  • 提问者 鱼儿0001 #1
    老师,public static void stop是静态方法,也是不变的,不能在net类里重写,TEMP是常量也不能重写。在INet net=new SmartWatch();后,怎么不能使用net.的方式调用?
    2019-06-09 15:00:58
  • 好帮手慕珊 回复 提问者 鱼儿0001 #2
    同学,你好!java底层在设计的时候不允许这么使用,如果用net去调用stop()这个接口的静态方法,会发生编译错误,提示只能通过接口名INet去调用。祝学习愉快!
    2019-06-09 19:45:47
吃吃吃鱼的猫 2019-06-07 18:13:59

net虽然是INet接口的引用,但是实际指向的是SmartWatch对象。

在SmartWatch对象中没有stop方法,所以使用net调用会出错。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    谢谢老师的回复,但是:在实现类是没有stop方法,可是在实现类里也没有TEMP和默认的cnnection方法啊,那为什么能调用TEMP和connection呢?
    2019-06-08 09:31:24
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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