黑马程序员技术交流社区

标题: 关于接口中静态常量的问题 [打印本页]

作者: 邹颖    时间: 2012-5-27 21:16
标题: 关于接口中静态常量的问题
本帖最后由 邹颖 于 2012-5-27 21:17 编辑

为什么接口中声明的变量默认都会有static final来修饰? 新手求解~
作者: 吴超    时间: 2012-5-27 21:40
static变量是类变量,不属于某个具体的对象,  
接口是一系列抽象方法的集合,无法实例化,所以必须是static类型;  
接口功能的实现必须依赖实现接口的类,一个类可以实现多个接口,而一个接口又可以被多个类实现,  
为了避免出现c++中多重继承基类中相同成员域的处理问题,java中就把接口中的成员域定义为static final类型。

作者: 陆建平    时间: 2012-5-27 22:11
接口是一组常量和抽象方法的集合。与抽象方法类似,接口只声明抽象方法头,不给出方法体,由实现接口的类实现的抽象方法。接口提供了方法声明与实现相分离的机制,使实现接口的多各类表现出相同的行为模式。每个实现接口的类可以根据各自的要求,给出抽象方法的具体实现。所以接口中声明的抽象方法在实现接口的各类中表现出多态性。正因为如此,才要有public、static、final修饰,而且他们也都可以省略。

作者: 徐炯    时间: 2012-5-27 22:14
2楼正解!赞一个!

补充下:
在设计方面,接口是对外暴漏的规则,既然是规则,则接口的成员属性不能随意被修改,所以是final型。
而接口里存在大量的抽象方法,无法被实例化,接口中的成员变量只能通过定义成static,才能被外界访问。

作者: 路冬冬    时间: 2012-5-27 23:52
接口不能够产生对象,把成员变量声明为static是会随着类的加载而加载,只要通过接口名就可以调用,而将其声明为final是因为防止多处调用该变量,因为为static修饰,所以所有的子类对象也是共享一个成员变量,而其如果是可变的话就会使变量的改变引起其它地方的改变,所以将其声明为静态常量,用static final修饰。
作者: 胡团乐    时间: 2012-5-28 07:20
我是这样认为的 接口需要让很多子类去实现它的方法以便完成功能调用,如果常量没static 和final修饰的话,即使没有访问常量方法,但也有可能通过反射拿到常量,然后修改之,这样会带来严重的不安全问题;反之用static 和final修饰后,就不会再发生改变,提高了安全性;所以即使你没添加static 和final修饰,接口通过自己的机制也会默认添加;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2