为什么接口中只能定义常量?

Posted 「已注销」

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么接口中只能定义常量?相关的知识,希望对你有一定的参考价值。

  学习完接口后,知道了接口中只能定义常量,即使你的代码是这样写的:public int a,底层语言也会默认加上public static final int a转为常量,那么这是为什么呢?

  我们都知道,接口中不能定义方法的实现,但是抽象类中是可以定义变量、常量以及方法的实现的,所以我们可以将接口看为比抽象类更高层次的抽象,是特殊的抽象类。加入接口可以定义变量,因为接口中的方法都是抽象的,我们无法通过行为,例如set()方法来修改这一属性值。

  或许有些人会说我们可以让实现接口的类的对象去修改接口的属性值,如果真的这样的话,比如接口中我定义了变量a,而且我们通过实现本接口的类B的对象改变了a的值,那么其他实现本接口的类B、类C中的变量a得知都要随着改变(因为它们实现的都是一个接口,处理的也是同一个变量,而变量的处理方式为传址),那么就会造成想要实现本接口的类却不知道接口里现在变量a到底是什么值,就会造成混乱。

  而且,抽象的概念是将不可变的东西提取出来封装到一起,将可变的东西放到实现中去,接口的设计理念既然是高层的抽象,那么就应该定义为不可变的东西,如果接口中定义了变量,就说明带了可变的成分,就不是高层抽象了。

   小结:接口是高层次的抽象,体现的是OCP(对修改关闭,对扩展开放)的设计原则,这也是我们设计中一直追求的。


以上是关于为什么接口中只能定义常量?的主要内容,如果未能解决你的问题,请参考以下文章

依赖倒置原则

门面模式

门面模式

《设计模式之禅》之六大设计原则中篇

外观模式

外观模式