Java 子类与超类通俗解析,新手也能秒懂
上一篇我们聊了 Java 的代理模式,今天咱们聚焦另一个概念 —— 子类与超类(也叫子类与父类),这是 Java 面向对象编程的 “基石”,也是理解代理、多态等知识点的底层逻辑。我依然用 “学术准确 + 通俗风趣” 的方式拆解,全程无晦涩套话,新手也能轻松拿捏~
一、先搞懂:啥是子类?啥是超类?
用生活例子类比—超类是通用模板,子类是基于模板的定制版。
1. 通俗理解:超类 = 父母,子类 = 子女
用最贴近生活的例子讲,一看就懂:
- 超类(父类 / 基类):就像 “动物” 这个通用模板 —— 所有动物都有 “名字”,都会 “呼吸”“吃东西”,这是所有动物的共同特征,超类就是定义这些 “共同特征” 的类。
- 子类:就像 “猫”“狗” 这些定制版 —— 它们继承了 “动物” 的所有共同特征(呼吸、吃东西),还能新增自己的专属特征(猫会抓老鼠,狗会看门),相当于在通用模板上做个性化定制。
2. 定义
| 概念 | 核心定义 | 核心作用 |
|---|---|---|
| 超类(Superclass) | 又称父类 / 基类,是一组相关类的 “通用抽象”,定义这组类的共同属性和方法 | 代码复用、抽象通用特征 |
| 子类(Subclass) | 通过extends关键字继承超类,继承超类的非私有属性 / 方法,可扩展专属功能 | 个性化定制、扩展通用模板 |
二、核心语法:如何定义子类与超类?
Java 中用extends关键字表示 “继承”,也就是声明 “这个类是另一个类的子类”,我们用 “动物→猫” 的例子写极简代码,可直接复制运行:
1. 第一步:定义超类(父类)—— 通用模板
// 超类(父类):Animal,定义所有动物的共同特征
public class Animal {
// 共同属性:所有动物都有名字(protected保证子类可访问)
protected String name;
// 共同方法:所有动物都会呼吸
public void breathe() {
System.out.println(name + "在呼吸");
}
// 共同方法:所有动物都会吃东西
public void eat() {
System.out.println(name + "在吃食物");
}
// 超类构造器:初始化共同属性
public Animal(String name) {
this.name = name;
}
}
2. 第二步:定义子类 —— 定制模板
// 子类:Cat,继承Animal超类(用extends关键字)
public class Cat extends Animal {
// 子类专属属性:猫的毛色(超类没有)
private String color;
// 子类构造器:必须先调用超类构造器(用super)
public Cat(String name, String color) {
super(name); // 调用超类Animal的构造器,初始化name
this.color = color; // 初始化子类专属属性
}
// 子类专属方法:猫抓老鼠(超类没有的功能)
public void catchMouse() {
System.out.println(name + "(" + color + ")在抓老鼠");
}
// 重写(Override)超类方法:定制“吃东西”的逻辑
@Override
public void eat() {
System.out.println(name + "在吃小鱼干(定制超类方法)");
}
}
3. 第三步:测试代码 —— 验证继承效果
public class Test {
public static void main(String[] args) {
// 创建子类对象:汤姆猫(灰色)
Cat tom = new Cat("汤姆", "灰色");
// 调用继承自超类的方法
tom.breathe(); // 输出:汤姆在呼吸
tom.eat(); // 输出:汤姆在吃小鱼干(定制超类方法)
// 调用子类的专属方法
tom.catchMouse(); // 输出:汤姆(灰色)在抓老鼠
}
}
运行结果:
汤姆在呼吸
汤姆在吃小鱼干(定制超类方法)
汤姆(灰色)在抓老鼠
三、规则:子类与超类的 “必记铁律”
1. 单继承规则(Java 的 “铁律”)
Java 中一个子类只能直接继承一个超类,比如Cat extends Animal是合法的,但Cat extends Animal, Dog是非法的 —— 就像现实中一个孩子只能有一个亲生父亲,避免继承关系混乱。
补充:如果想实现 “多继承” 的效果,可通过实现多个接口解决,比如
class Cat extends Animal implements Runnable, Comparable。
2. 重写(Override)规则
子类重写超类方法时,必须满足 3 个 “一致”:
- 方法名一致(比如都是
eat()); - 参数列表一致(比如都无参数);
- 返回值类型一致(比如都是
void);
小技巧:加上
@Override注解,编译器会帮你校验是否符合重写规则,避免写错。
3. super 关键字的用法
super是子类调用超类的 “专属钥匙”,主要有 3 种用法:
- 调用超类构造器:
super(name)(必须放在子类构造器的第一行); - 调用超类方法:
super.eat()(在子类中调用超类的原始方法); - 调用超类属性:
super.name(直接访问超类的属性)。
4. 访问权限规则
子类能继承超类的非私有属性 / 方法:
public/protected:子类可直接访问;private:子类无法直接访问(需通过超类的get/set方法);- 默认权限(无修饰符):仅同包子类可访问。
四、子类超类与代理的关联:底层逻辑相通
学完子类超类,我们回头关联上一篇的代理模式 —— 其实代理的底层,就隐含了子类与超类的思想:
- 超类(接口):比如
Comparable接口(定义了compareTo方法,是所有实现类的 “通用模板”); - 子类:JDK 动态生成的代理对象(实现了
Comparable接口,相当于Comparable的 “子类”); - 逻辑:代理对象作为 “子类”,继承了接口的
compareTo方法,同时通过InvocationHandler实现了方法增强(日志打印)—— 这也是代理能调用compareTo方法的底层原因。
五、总结:

子类与超类的核心是 “代码复用 + 定制扩展”,初学阶段不用纠结复杂的继承体系,先掌握 “extends继承、super调用、@Override重写” 这三个核心操作,能写出 “动物→猫 / 狗” 这类基础案例,就已经掌握了 80% 的核心逻辑。








