A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

求大神讲解接口为什么不能和static共存

16 个回复

正序浏览
第一点:static修饰的成员是随着类的加载而加载,优先于对象而存在的。
第二点:接口是不能不能实例化对象的。
你觉得这两者能够共存吗?
回复 使用道具 举报
为什么,可能会失去多态 的特性
回复 使用道具 举报
刚学过,但是不是很理解。
回复 使用道具 举报
接口方法全部都是抽象的,如果是静态可以直接类名调用,这样不久出错了
回复 使用道具 举报
yearn 中级黑马 2015-4-16 16:22:05
12#
static方法不能被覆盖!
回复 使用道具 举报
因为抽象方法不能直接使用,必须实现。
然而static修饰的变量和方法能够直接使用,这是相冲突的。
到底听谁的呢?抽象的,还是静态的。
干脆来个互斥,我存在,你就滚蛋,我不存在,你才能存在
回复 使用道具 举报
如果用static修饰的接口就不能用了
回复 使用道具 举报
接口是用interface修饰。你是应该是说接口里的抽象方法为什么不可以用static修饰的问题。  不可以是因为static静态是要给类进行初始化,开辟内存空间,分配内存给对象。  既然接口是不可以实例化,要靠子类实现全部的抽象方法才可以才可以实例化。所以接口中的方法是public abstract修饰的。
回复 使用道具 举报
也不是吧,接口里面的成员变量必须用public static final修饰。
回复 使用道具 举报
CZTTZ 中级黑马 2015-4-16 12:13:00
7#
接口的出现是设计给类实现的,如果定义成静态,就不能被实例,也就没有实现的价值了
回复 使用道具 举报
接口是设计用来给类实现的,如果定义为static,那么意味着不存在实例方法,也就没有实现的价值了
回复 使用道具 举报
首先static是静态的,被其修饰的都会在堆内存中开辟空间,相当于加载时就进行实例化了
而接口里面都是抽象的方法,都是不能被实例化的存在,这样一想应该就行了
回复 使用道具 举报
这个问题挺好
回复 使用道具 举报
首先 接口中的所有方法都是abstract的,也就是抽象的,而抽象方法时没有static的,因为抽象方法没有方法体,而且有static的方法是不能覆盖的,需要子类 也用static修饰,所以这样定义接口才有意义。但是接口中的变量也都是Final、static的
回复 使用道具 举报
接口内方法的修饰词,都是public static
成员变量修饰词默认都是public static final

点评

你记错了,方法是:public abstract 没有static修饰。  发表于 2015-4-16 09:43
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马