PDF 课件和源代码下载地址:
https://gitee.com/geektime-geekbang/LetsJava
作者回复: 抽象类中的抽象方法强制实现类必须实现某个方法,类继承无法强制子类必须覆盖某个方法。 其实接口的用处非常大,除了可以实现多类型(不算多继承),使用接口还是设计程序的必备。这些都不仅仅是从语法层面,更多的是思想的转变。 举个例子,盖大楼为什么要用设计图纸?直接上混凝土一边盖一边设计可以吗?不能说不可以,只能说不科学,不实际。 如果在盖大楼之前没有想好大楼是什么样子,承重,需要多少原材料等等等等问题,这样盖成大楼的可能性很低,或者花费会非常高。
作者回复: 不会就想想,想不通就问,不要有那么大的压力哈,我又不能吃了你哈哈哈哈哈哈 首先,你的理解是没错的,抽象类确实是有点鸡肋的,尤其是在Java8里支持接口里定义default方法之后,抽象类这个介于类和接口之间的东西,就更鸡肋了。 那么抽象类的存在意义是什么呢?视频里有提到但是没有总结,抽象类: 1)比起接口,可以定义成员变量 2)比起一般的类,可以强制子类必须实现某个方法(当然,要么子类还是抽象类,还是不能用new创建实例) 当接口可以有缺省方法之后(这个后面会讲,简单来说就是给一个抽象的方法搞一个缺省的实现),抽象类存在的意义就是可以定义成员变量了。 但是抽象类的问题在于它还是类,所以就只能单继承。而接口的优势是一类可以实现多个接口。所以抽象类就更更鸡肋了。 不过再鸡肋,也有它的使用场景,只是这个场景在被压缩而已,哈哈。
作者回复: ✅
作者回复: 对的,现在 Java 8 以后的的版本也支持让接口有 default 方法了。相当于实现接口就可以获取接口里的方法。后面会讲到这一点。
作者回复: java.util.Date
作者回复: Dei Dei Dei(三声)
作者回复: 对的,当然子类也可以声明为抽象类,这样就不用实现抽象方法了。