接口中可以有非静态变量吗?

接口中可以有非静态变量吗?

这是我在面试中碰到的一道面试题。

如果对八股文熟悉的同学可能会想到这是在常见面试题"接口和抽象类的区别"中一个小知识点,即 接口中只能包含静态属性,由public static final修饰,并且必须初始化赋值 。

那么为什么是这样呢?

如果不是public,它的子类访问不到这个变量,接口本身也无法实例化,则这个变量毫无意义。

如果不是static,一个类实现多接口,而多接口具有同名变量,实现类就不知道该访问哪一个。并且使用static可以避免每个类都重复创建这个变量。

如果不是Final并且对其初始化赋值,那么所有实现它的类都可以对其进行修改,接口就失去了提供统一约束的作用。

最后我们来回顾一下"接口"是什么?接口(interface)是一种特殊的抽象类,它是一组没有实现的方法的集合,定义了一组操作,但没有提供实现。接口主要用于 定义规范、规则和约束 ,是一种纯粹的行为描述机制。

总的来说,接口中不能有可变的变量,只能是不可变的,并且只可读不可写,只有这样才可以保证接口的约束。接口是一种更高级别的抽象,是一种规范功能定义的声明,所有可变的都应该在子类中具体来实现。对修改关闭,对扩展开放,接口正是"开闭原则"的体现!

相关推荐

张碧晨个人资料及简历(张碧晨履历)
beat365英超欧冠平台

张碧晨个人资料及简历(张碧晨履历)

📅 09-12 👁️ 5070
AI识图软件哪个好: 选择合适的AI图像识别软件指南
beat365英超欧冠平台

AI识图软件哪个好: 选择合适的AI图像识别软件指南

📅 10-12 👁️ 4908
剑网3无盐岛多少级可以进
365betappios

剑网3无盐岛多少级可以进

📅 09-20 👁️ 5484
张翰霸总人设再上热搜,评分2.2分遭央媒批评,“咸猪手”惹人嫌
蚌的成语
be365

蚌的成语

📅 08-05 👁️ 4069
手机房产软件类app排行榜TOP10推荐
365betappios

手机房产软件类app排行榜TOP10推荐

📅 08-31 👁️ 8367