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

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

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

那么为什么是这样呢?

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

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

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

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

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

全部评论

相关推荐

叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

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