《继承与多态》
抽象类与接口,是"设计"的分水岭
这一部分从"是什么"上升到"怎么设计":
抽象类:abstract 修饰,只声明"应该有哪些方法",不能 new,必须派生子类实现抽象方法才能实例化。它有三种来源(直接定义抽象方法 / 继承抽象父类未完全实现 / 实现接口未完全实现)。
接口:用鸭子问题引出——鸭子既是鸟(IS_A)又会游泳、又能被吃,而 Java 不支持多继承,"会游泳"这类可附加特性,就交给接口来抽象"行为特征"。接口成员函数自动 public,数据成员自动 static + final,一个类可实现多个接口。
二者区别:抽象类是不完全的类、涉及实现;接口只承诺"外界能调用什么",不碰实现。一个类只能继承一个父类,但能实现多个接口。
我的感受:这是从"会用语法"迈向"会做设计"的一课。接口把"能做什么"和"是什么"解耦——Duck extends Bird implements IFood 让我第一次理解了为什么面向对象语言需要接口:继承表达"是什么",接口表达"还能做什么"。分清这两条线,是设计可扩展系统的基础。
浙公网安备 33010602011771号