1. 为什么需要继承:代码复用的本质
我第一次真正理解继承的价值,是在维护一个老旧的Java项目时。当时系统中有几十个相似的实体类,每个类都重复定义了id、createTime、updateTime这些字段,以及对应的getter/setter方法。每次修改基础字段都要在所有类中同步变更,这种重复劳动让我开始思考:面向对象难道就是为了制造样板代码吗?
继承机制的出现,完美解决了这个问题。通过将公共属性和行为抽取到父类中,子类只需关注自身特有的部分。这种"is-a"关系(子类是父类的一种)是面向对象设计的基石。举个例子,电商系统中的User和Admin都可以继承自BaseUser:
java复制class BaseUser {
private Long id;
private String username;
// 公共getter/setter
}
class User extends BaseUser {
private Integer creditLevel; // 用户特有属性
}
class Admin extends BaseUser {
private String department; // 管理员特有属性
}
关键经验:当发现多个类有超过30%的重复代码时,就该考虑使用继承了。但要注意,继承层次不宜过深(建议不超过3层),否则会带来维护复杂度。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 继承的核心语法与规则
2.1 extends关键字的使用
Java中使用extends关键字实现继承,语法看似简单却暗藏玄机:
java复制class Parent {
protected String familyName = "张";
}
class Child extends Parent {
void printName() {
System.out.println(familyName); // 可直接访问父类protected成员
}
}
这里有个容易踩的坑:子类构造方法中必须首先调用父类构造器。如果父类没有无参构造器,必须用super()显式调用:
java复制class Parent {
Parent(String
