为什么接口中不能定义变量

JAVA语法规定,接口中的变量默认自动隐含是public static final! 为什么需要这样定义? 接口的目的 OOP中一个很重要的概念就是封装,对象可以通过public interface的设计,来提供一系列方法,让用户能够利用利用对象来完成需要的任务。然而,内部的实现细节对用户是隐藏的,目的是为了对具有共同特点的类,能够用相同的方法来使用,并且可以进行类的转换。 例如,考虑为你的VCR,DVD播放,磁带录音机,CD,镭射磁盘播放器,编写一个家用的统一遥控器,遥控器对5个设备来说,有相同的按钮,播放,停止,快进,重复,暂停 你可能注意到,没有启动,打开镭射,打开磁铁等等按钮,这些细节是隐藏的,不是由于必要的安全原因, 更正确的是因为这些是具体设备的实现部分,从而能够方便从设备到设备的切换,并且不针对到所有的设备。 接口的主要目的,是提供设备中那些对用户是可用的细节(遥控器)。这就是为什么接口中所有的方法默认隐含是public的:这些方法本意就是对用户是可访问的。这就是接口的使用目的。 OOP另外一个重要的设计原则,在几乎所有的情况下,一个好的对象设计不会提供给客户直接访问它的实例变量的能力。通常,那些对象应该对变量定义访问和获取方法来实现变量的操作。 这样,设计者可以设置合理的限制条件在那些变量上 因此,public的实例变量不应该是好的接口定义的一部分,他们不能在java的接口中定义。 然而public static final修饰用于定义java中的常量,前提是那些需要定义的常量是不能改变的,这样就可以直接让他们暴露在类的public interface中, 这就是为什么变量在接口中必须是static(同样必须public和final的) 从这段翻译: http://forum.java.sun.com/thread.jspa?threadID=741407&messageID=4251167 个人的理解: public: public的原因就不用讲了,接口定义的都是对用户可以使用的部分。 final: 变量属于类的细节,应该被隐藏,public的变量,在类中不是很好的设计,没有体现封装的开闭原则 static:final是用来定义常量的,仅仅是final在类中static段也是可以改变的,所以必须是static final 附例: class C { static final int X; static { X = 17; } } interface I { int Y; static { Y = 17; } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值