为了账号安全,请及时绑定邮箱和手机立即绑定

接口为什么只能有常量不能有变量?

背景:接口中只有常量,不能存在变量

代码:

public interface A{
    int i=10;
    void f();
    }

问题:以上代码中i默认是public static final。请问一下实现接口的过程中,是否与继承一样是在本对象的堆空间中开辟一块给父类实例域存放值,如果是这样子的话我认为接口中是可以存在变量的。接口规定方法名不规定实现,引申就是规定变量名不规定具体值,这样思考不对吗?

PS:请回答大神不要用现状/规定来反推一定要是这样,在下还是想好好理解一下OOP的设计思路,感谢

正在回答

3 回答

为什么抽象类可以有变量?

0 回复 有任何疑惑可以回复我~
#1

weixin_慕的地3225568

因为抽象类是类,被继承是extends,而Java是单继承,不会造成混乱,所以可以有变量
2020-02-17 回复 有任何疑惑可以回复我~

咦,自己查资料发现原因如下:

  1. 首先接口由于少了方法的实现,所以不能实例化,这个与抽象类一致,

  2. 由于不能实例化,所以对于成员变量只能是static

  3. 由于是static所以所有实现了接口的类共享一份

  4. 由于所有人共享一份,同时接口的定义是“所有实现该接口的人都共同拥有这些属性/功能”

  5. 由于所有的实现类都共同拥有,若是变量则实现类A的改变会导致实现B的改变

  6. 会由于实现类的操作而改变的东西违反了接口的定义

  7. 所以为了确保每个实现的接口都共同遵守这个“属性”,属性必须是final

  8. 由于接口本身的定义是public

  9. 最后就是 public static final xxx

3 回复 有任何疑惑可以回复我~
#1

Antique 提问者

简单说还是为了保持一个“大家都一样”的特性
2017-09-21 回复 有任何疑惑可以回复我~

甲鱼的臀部——龟腚

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

接口为什么只能有常量不能有变量?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信