Antique
2017-09-21 11:20
背景:接口中只有常量,不能存在变量
代码:
public interface A{ int i=10; void f(); }
问题:以上代码中i默认是public static final。请问一下实现接口的过程中,是否与继承一样是在本对象的堆空间中开辟一块给父类实例域存放值,如果是这样子的话我认为接口中是可以存在变量的。接口规定方法名不规定实现,引申就是规定变量名不规定具体值,这样思考不对吗?
PS:请回答大神不要用现状/规定来反推一定要是这样,在下还是想好好理解一下OOP的设计思路,感谢
为什么抽象类可以有变量?
咦,自己查资料发现原因如下:
首先接口由于少了方法的实现,所以不能实例化,这个与抽象类一致,
由于不能实例化,所以对于成员变量只能是static
由于是static所以所有实现了接口的类共享一份
由于所有人共享一份,同时接口的定义是“所有实现该接口的人都共同拥有这些属性/功能”
由于所有的实现类都共同拥有,若是变量则实现类A的改变会导致实现B的改变
会由于实现类的操作而改变的东西违反了接口的定义
所以为了确保每个实现的接口都共同遵守这个“属性”,属性必须是final
由于接口本身的定义是public
最后就是 public static final xxx
甲鱼的臀部——龟腚
Java入门第二季 升级版
530554 学习 · 6091 问题
相似问题