Java 继承详解(核心特性 + 代码实战 + 面试必问)
·
一句话核心答案:继承就是子类继承父类的属性和方法,实现代码复用和功能扩展,Java 只支持单继承,核心关键字是extends,遵循is-a(是一种) 关系 。
1. 什么是继承?
继承是 Java面向对象三大特性之一,是代码复用的重要手段。当多个类存在相同属性和行为时,可将这些内容抽取到单独一个父类(超类 / 基类) 中,其他类只需通过extends关键字继承父类,就能直接拥有父类的非私有成员,无需重复定义。
核心作用
- 提高代码复用性,减少冗余代码
- 便于功能扩展,子类可重写父类方法
- 建立类与类之间的关系,是多态的前提
2. 继承的实现语法
格式:子类 extends 父类规则:
- Java 只支持单继承,一个子类只能有一个直接父类
- 支持多层继承(父类还可以继承其他类)
- 子类不能继承父类的
private成员 - 子类可以重写(Override)父类的非静态方法
示例代码
// 父类:抽取公共属性和方法
public class Person {
// 公共属性
String name;
int age;
// 公共方法
public void eat() {
System.out.println("人要吃饭");
}
public void sleep() {
System.out.println("人要睡觉");
}
}
// 子类1:学生类 继承 人类
public class Student extends Person {
// 子类独有属性
String studentId;
// 子类独有方法
public void study() {
System.out.println(name + " 正在学习");
}
}
// 子类2:老师类 继承 人类
public class Teacher extends Person {
// 子类独有属性
String course;
// 子类独有方法
public void teach() {
System.out.println(name + " 正在授课");
}
}
测试类
public class TestExtends {
public static void main(String[] args) {
// 创建学生对象
Student stu = new Student();
// 直接使用父类的属性和方法
stu.name = "小明";
stu.age = 18;
stu.eat();
stu.sleep();
// 使用子类独有方法
stu.study();
System.out.println("============");
// 创建老师对象
Teacher teacher = new Teacher();
teacher.name = "李老师";
teacher.eat();
teacher.teach();
}
}
运行结果
人要吃饭
人要睡觉
小明 正在学习
============
人要吃饭
李老师 正在授课
关键点
- 单继承:一个子类只能直接继承一个父类(Java 禁止多继承)
- 代码复用:父类的通用代码,所有子类直接使用,无需重写
- 子类扩展:子类可以新增自己独有的属性和方法
- 成员访问:子类无法直接使用父类
private成员,可通过get/set访问 - Object 类:所有类默认直接或间接继承
Object类
3. 方法重写(Override)—— 继承的核心扩展
重写:子类对父类的方法进行重新实现,保留方法名、参数列表、返回值,修改方法体。
重写示例
// 父类
public class Animal {
public void shout() {
System.out.println("动物叫");
}
}
// 子类:狗
public class Dog extends Animal {
// 重写父类方法
@Override
public void shout() {
System.out.println("汪汪汪");
}
}
// 子类:猫
public class Cat extends Animal {
// 重写父类方法
@Override
public void shout() {
System.out.println("喵喵喵");
}
}
4. 继承的核心特性总结表
| 特性 | 说明 |
|---|---|
| 核心关键字 | extends |
| 继承数量 | 单继承(一个子类只能有一个直接父类) |
| 成员继承 | 可继承非private成员变量、方法 |
| 方法修改 | 可重写 (Override) 父类非静态方法 |
| 层级关系 | 支持多层继承(A extends B,B extends C) |
| 顶层父类 | 所有类默认继承Object |
5. super 关键字(继承必备)
super代表父类引用,用于访问父类的属性、方法、构造方法。
常用场景
- 调用父类构造方法:
super() - 调用父类成员变量:
super.变量名 - 调用父类被重写的方法:
super.方法名()
示例
public class Student extends Person {
@Override
public void eat() {
super.eat(); // 调用父类的eat方法
System.out.println("学生吃饭要快");
}
}
6. 总结
| 特点 | 继承 |
|---|---|
| 核心思想 | is-a(是一种)关系,代码复用 |
| 关键字 | extends |
| 数量限制 | 单继承,不能多继承 |
| 核心功能 | 复用父类代码 + 子类扩展功能 |
| 适用场景 | 多个类有相同属性 / 方法时 |
✅ 什么时候使用继承
- 多个类存在共同属性、共同方法,可以抽取父类
- 类与类之间满足 is-a 关系(学生 is a 人、狗 is a 动物)
- 需要复用代码并扩展功能
- 为多态提供前提
❌ 什么时候不使用继承
- 类之间没有逻辑包含关系,强行继承会导致结构混乱
- 仅为了复用方法,但无层级关系(优先用工具类 / 组合)
🌟最终结论继承 = extends + 代码复用 + 方法重写,是 Java 面向对象的核心特性,单继承是 Java 的重要规则,掌握继承是学习多态、框架源码的基础 🚀
更多推荐



所有评论(0)