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

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

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

那么为什么是这样呢?

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

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

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

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

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

全部评论

相关推荐

屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
04-14 20:10
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务