返回信息流问题1、abstract类存在的意义?接口存在的意义?这俩你不感觉有点重叠么?
问题2、既然java8里的接口可以定义default方法,那么abstract类还有存在的意义吗?
这是一条镜像帖。来源:北邮人论坛 / java / #50374同步于 2016/5/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
请教个人感觉比较新颖的面试问题,大家各抒己见。
MengNiu
2016/5/18镜像同步43 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
抽象是通过封装共性抽离变化来达到清晰逻辑和复用代码的目的
abstract 类可以继承的有内部状态、内部逻辑和方法签名,而 interface 更聚焦只可以继承方法签名
举例1: Collections.sort(List<T extends Comparable<? super T>> list) 是一段可复用代码,只要确保集合元素实现了 Comparable 接口声明的方法 public int compareTo(T o) 就可以进行排序,而不用关注集合元素的其它属性
举例2: 现有需求 a 和 b 2个手机界面初始化过程、动画逻辑和最终界面显示一模一样,除了有1个按钮点击后跳往另外2个不同的地方
假设有3种实现方式:
方法1: 先实现 a 然后完全复制 a 的代码到 b 里并修改按钮点击跳转方法
方法2:先实现 a 然后使 b 继承 a 并复写按钮点击跳转方法
方法3:定义抽象类包含手机界面初始化过程、动画逻辑和最终界面显示,定义按钮点击跳转方法为抽象方法,然后让 a 和 b 分别继承该抽象类
方法1通过复制粘贴来达到真复用代码,就不说了;方法2的问题是 b 为 a 的子类逻辑上讲很怪异;方法3正如开头说的,封装共通的显示逻辑,抽离变化的跳转方法,既复用了代码,逻辑又很清晰
所以说 abstract 和 interface 能力和应用场景是不一样的,就算 interface 有了 default 方法, abstract 也是有其存在的意义
最后感觉 interface 的 default 是不是就是个给程序员偷懒用的语法糖啊,求教