您的位置:首页 > 运维架构

为什么接口中不能定义变量(oop设计原理)

2015-05-13 14:26 211 查看
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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: