为什么接口中不能定义变量(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;
}
}
为什么需要这样定义?
接口的目的
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;
}
}
相关文章推荐
- 为什么接口中不能定义变量
- 为什么接口中不能定义变量
- 为什么接口中定义的变量都是final static的
- java为什么定义的变量在main中不能用?
- 接口中定义的变量为什么是常量
- 解析面试题-接口中的成员变量为什么要定义成public static final
- 大数组定义在main函数中不能执行,为什么将其定义为全局变量就可以执行?
- 头文件中只能声明变量不能定义变量 而声明变量必须带extern,为什么头文件中变量的声明都没有加
- 头文件为什么不能定义变量
- 定义数组时为什么不能用含有变量的表达式
- 关于为什么不能在头文件中包含变量定义的解释
- 为什么 Java 接口中不允许定义变量
- JAVA成员变量为什么不能在类体中先定义后赋值
- 这个程序中为什么出错???为什么不能把nl,nr定义为全局变量,求大神指教
- 关于C++ 类数据成员初始化的一点总结【为什么类定义中不能初始化成员变量】
- 头文件、声明、定义以及条件编译为什么不能定义变量的个人理解
- 为什么.h文件中不能定义全局变量
- 为什么在函数中不能通过指针返回本地定义的变量
- 为什么接口中定义的变量必须为常量?
- 为什么for不能有序遍历数组的所有元素?(Array的设计原理)