接口中的成员变量为什么要是static的?

BankingRegulatorLLM 2010-03-14 05:30:18
一直以来,就只是知道 java中的接口定义的成员变量必须是public static final.
由于接口就是标准嘛!对于public final肯定是好理解的,可是对于为什么要是static 的
就不得而知了。提问一下,希望得到较深入地回答 。
...全文
413 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mixcy 2010-12-28
  • 打赏
  • 举报
回复
我想7F回答的是为什么是final
至于要加static的原因 个人是这么理解 应该是解决了用接口来实现多继承中存在的问题
如果一个类实现了两个接口A,B. 而A和B中都有相同的属性名...那如何区分
所以有必要加上static
BearKin 2010-03-16
  • 打赏
  • 举报
回复
接口中不允许方法的实现,而抽象类是允许方法实现的及定义变量的,因此我们可以看出接口是比抽象类更高层次的抽象。如果接口可以定义变量,但是接口中的方法又都是抽象的,在接口中无法通过行为(例如set()方法)来修改属性。那么有些人就会提出可以通过实现接口的类的实例来修改接口的属性。那好,如果接口中有一变量c,我们通过实现它的A类对象改变了c的值,那么实现接口的B类,C类中的c变量都要跟着改变,可想而知这样就会造成混乱,很多想要实现接口的类就不知道接口里现在c变量到底是什么值,因为接口是在变的,它不再是那种高层的抽象,而是带了可变的成分。所谓的抽象就是把一些不可变的东西放在一起,而可变的东西往往放在实现里面。

所以我们深思接口的本意所在,实际上它是对一类事物属性和行为的高层次抽象,它体现的是OCP(对修改关闭,对扩展开放)原则,这也是我们软件开发中一直所追求。

http://www.javaeye.com/topic/220134
JavaAlpha 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bearkin 的回复:]
接口中不允许方法的实现,而抽象类是允许方法实现的及定义变量的,因此我们可以看出接口是比抽象类更高层次的抽象。如果接口可以定义变量,但是接口中的方法又都是抽象的,在接口中无法通过行为(例如set()方法)来修改属性。那么有些人就会提出可以通过实现接口的类的实例来修改接口的属性。那好,如果接口中有一变量c,我们通过实现它的A类对象改变了c的值,那么实现接口的B类,C类中的c变量都要跟着改变,可想而知这……
[/Quote]

解释的太详细,太明确了。
luweiyuan01 2010-03-16
  • 打赏
  • 举报
回复
接口中的属性默认是public final static
zhudongdong007 2010-03-15
  • 打赏
  • 举报
回复
接口里面的好像都是静态常量吧!
我也不太明白,
加油,楼主。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jqc200902 的回复:]
朋友,这个我告诉你,接口只是一些规范、功能的定义声明,接口中只能有类常量,我们之前学过如何去声明常量,就是使用final修饰符,常量通常都会和static这个修饰符一起使用,以节约内存的空间,在接口中声明的变量,会自动成为类常量,所以不需要自行加上static和final的修饰符。
[/Quote]
还是不明白变量为什么要申明成static的,难道仅仅是节省内存空间吗 ???
qjcslgnhwayagain 2010-03-14
  • 打赏
  • 举报
回复
变量加上static 应该是说明这个量是该接口所以被继承的类所共有的吧
michaellufhl 2010-03-14
  • 打赏
  • 举报
回复
Interface里面有non-static的东西不就是abstract class了么:)
jqc200902 2010-03-14
  • 打赏
  • 举报
回复
朋友,这个我告诉你,接口只是一些规范、功能的定义声明,接口中只能有类常量,我们之前学过如何去声明常量,就是使用final修饰符,常量通常都会和static这个修饰符一起使用,以节约内存的空间,在接口中声明的变量,会自动成为类常量,所以不需要自行加上static和final的修饰符。
bibihenmuc 2010-03-14
  • 打赏
  • 举报
回复
个人认为,标准的含义不仅是不可变,而且还有通用的意思!既然接口的设计是为了标准化,那么他的成员变量也就应该是一个标准的变量,final体现了不可变的意思,而static体现了通用的意思,以上纯属个人见解,嘿嘿

50,549

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧