继承、多态与接口:让代码可扩展
W3 你学会了造类。W4 要解决的是:需求一变,代码会不会碎成渣?答案往往藏在 继承、多态、接口 里。
继承:is-a 关系
public class Person {
protected String name;
public Person(String name) { this.name = name; }
public void introduce() {
System.out.println("我是" + name);
}
}
public class Student extends Person {
private String studentId;
public Student(String name, String studentId) {
super(name);
this.studentId = studentId;
}
@Override
public void introduce() {
System.out.println("我是学生" + name + ",学号" + studentId);
}
}
extends:学生 是一种 人super:调用父类构造@Override:重写父类方法
能用组合(has-a)就别滥用继承。继承适合稳定的 is-a。
多态:同一个调用,不同表现
Person p = new Student("小杨", "2026001");
p.introduce(); // 实际执行的是 Student 的 introduce
父类引用指向子类对象。调用方法时,看 对象真实类型。这就是多态。
好处:管理器可以只依赖 Person,以后加 Teacher 不用改管理器主流程。
抽象类 vs 接口
抽象类:有共性实现,又希望子类必须实现某些方法。
public abstract class Shape {
public abstract double area();
public void printArea() {
System.out.println(area());
}
}
接口:定义能力契约,「能做什么」,不关心你是谁。
public interface Persistable {
void save();
}
public class Student implements Persistable {
@Override
public void save() {
System.out.println("保存学生...");
}
}
现代 Java 开发里,面向接口 出现频率极高(Spring 几乎建立在这上面)。
重构任务:给学生管理系统加接口
public interface StudentRepository {
void add(Student s);
void list();
}
public class MemoryStudentRepository implements StudentRepository {
// 把原来 StudentManager 的数组逻辑搬进来
}
main 只依赖 StudentRepository,不依赖具体实现。以后换成数据库实现,调用方几乎不用改。
本周练习清单
一句话记住
- 继承:复用与扩展 is-a
- 多态:同一指令,不同角色不同演技
- 接口:约定能力,分离实现
写在最后
语言基础的「对象篇」到这里告一段落。下周进入 集合框架——用 ArrayList 替换手写数组,生产力会立刻上升一截。
YoungGc · Eden手记
学习是第一生产力。
如发现有错误欢迎指正,欢迎交流,接受反驳。 -- by不为 :)

浙公网安备 33010602011771号