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

来源:10-5 Java 中的接口

Antique

2017-09-21 11:20

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

代码:

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

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

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

写回答 关注

3回答

  • qq_慕瓜9564016
    2019-10-05 22:17:20

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

    weixin...

    因为抽象类是类,被继承是extends,而Java是单继承,不会造成混乱,所以可以有变量

    2020-02-17 12:14:24

    共 1 条回复 >

  • Antique
    2017-09-21 16:10:29

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

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

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

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

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

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

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

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

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

    9. 最后就是 public static final xxx

    Antiqu...

    简单说还是为了保持一个“大家都一样”的特性

    2017-09-21 16:17:53

    共 1 条回复 >

  • 幕布斯6000395
    2017-09-21 13:13:47

    甲鱼的臀部——龟腚

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530554 学习 · 6091 问题

查看课程

相似问题