java中为什么接口中的属性都默认为static和final?

1)为什么接口中的属性都默认为static和final?Sun公司当初为什么要把java的接口设计发明成这样?【新手可忽略不影响继续学习】
答:接口中如果可能定义非final的变量的话,而方法又都是abstract的,变量的修改就需要实现类来完成。这样一来就有悖于Sun公司开始设计interface的初衷。interface就像一个合同,规定后来的类A和B, 都按照这个合同来做事,怎么能谁想怎么改就怎么改?另外,为什么必须为static呢?这样,未来的子类的static方法也能访问到它,可以最大限度的发挥接口属性的功能。

2)接口和抽象类有什么区别?
答:抽象类里可以有实现的方法,接口里不能有,所以相对来讲各方面实现都简单(尤其动态方法调度)另外:类可以实现多个接口。反过来说,也正是抽象类一个致命伤:类只能继承一个超类(抽象类或其他类)。
3)为什么接口能胜任作为和外部系统打交道的合同而抽象类就不行?(见下面我的山和车,肥皂的例子)【新手可忽略不影响继续学习】
答:假设你用抽象类作为合同,外部系统有个类A,它本来固有就必须得继承一个类B,现在还必须得继承你这个抽象类,语法上不允许。反过来,如果你不用抽象类而用接口作为合同,语法上就允许了。这样,接口的多实现性,就等同于另外一句话:“不占继承资源”。外部系统具有很强的不可预见性,换句话说, 谁知道你过去的类继承没继承其他的类,我不管,反正我的合同内容写在一个接口中,即使你过去必须继承一个别的类,也不影响你再多实现一个我,因为我是接口。

更多请见:http://www.mark-to-win.com/tutorial/java_4_InterfaceIsStaticFinal.html

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值