论坛首页 Java企业应用论坛

Java接口中的成员变量为什么必须是public static final?

浏览 10736 次
精华帖 (0) :: 良好帖 (4) :: 新手帖 (1) :: 隐藏帖 (12)
作者 正文
   发表时间:2011-04-12   最后修改:2011-04-12

在interface里面的变量默认都是public static final 的。所以可以直接省略修饰符:

String param="ssm";//变量需要初始化

 

为什么接口要规定成员变量必须是public static final的呢?

 

答:

首先接口是一种高度抽象的"模版",,而接口中的属性也就是’模版’的成员,就应当是所有实现"模版"的实现类的共有特性,所以它是public static的 ,是所有实现类共有的 .假如可以是非static的话,因一个类可以继承多个接口,出现重名的变量,如何区分呢?

 

其次,接口中如果可能定义非final的变量的话,而方法又都是abstract的,这就自相矛盾了,有可变成员变量但对应的方法却无法操作这些变量,虽然可以直接修改这些静态成员变量的值,但所有实现类对应的值都被修改了,这跟抽象类有何区别? 又接口是一种更高层面的抽象,是一种规范、功能定义的声明,所有可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用。所以接口中的属性必然是final的。

 

最后,接口只是对事物的属性和行为更高层次的抽象 。对修改关闭,对扩展(不同的实现implements)开放,接口是对开闭原则(Open-Closed Principle )的一种体现。

 

不知道大家能否认同?请畅所欲言!

 

   发表时间:2011-04-12  
你说的都对
接口可以理解成一个高度抽象化的约定,凡是实现该接口的都要遵循这个约定,如果约定中的内容随便改,那怎么通信呢......
0 请登录后投票
   发表时间:2011-04-13  
看接口的定义就知道了
接口本来就是实现封装的一种手段,它的目的就是将类的使用说明与类的实现相分离

如果接口中出现实例变量,那接口就变驴子了
0 请登录后投票
   发表时间:2011-04-13  
我不知道有人投隐的原因。
0 请登录后投票
   发表时间:2011-04-13  
要怎么样才能投贴呢??
0 请登录后投票
   发表时间:2011-04-13  
接口就像标准,不开放定义这破玩意有啥用处.........................
0 请登录后投票
   发表时间:2011-04-13  
cjh_ubuntu 写道
我不知道有人投隐的原因。

说句不好听的话,很多投隐的人其实自己本身也就是个半罐水,技术讨论本来就不应该分层次,恰恰我认为现在很多人最缺的就是扎实的基础。
0 请登录后投票
   发表时间:2011-04-13  
接口是一种抽象化,起到标准化、规范化的作用。赞同
0 请登录后投票
   发表时间:2011-04-14  
这是java的规范,没为什么,不需要为什么。。王八的屁股,龟腚~
0 请登录后投票
   发表时间:2011-04-14  
楼主想多了。static是为了开始的时候初始化,final是为了编译期间的优化,怎么也没有觉得太高深的东西。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics