在开发一个学生管理系统时,可能会遇到学生、老师、管理员等不同角色。这些角色有共性,比如都有姓名和年龄,但各自又有独特行为。这时候用 Java 的类继承,就能避免重复写相同的代码。
继承的基本写法
Java 中通过 extends 关键字实现类继承。子类会自动拥有父类的属性和方法。例如,定义一个基础的“人”类:
class Person {
String name;
int age;
void introduce() {
System.out.println("我是" + name + ",今年" + age + "岁");
}
}
接着让 Student 类继承 Person:
class Student extends Person {
String studentId;
void study() {
System.out.println(name + "正在学习");
}
}
创建 Student 对象后,不仅能访问自己的 studentId 和 study() 方法,也能调用从父类继承来的 name 和 introduce()。
方法重写:让行为更具体
有时候子类需要修改继承来的方法。比如老师也会自我介绍,但格式和普通人不一样。可以使用 @Override 注解重新定义方法:
class Teacher extends Person {
String subject;
@Override
void introduce() {
System.out.println("我是" + name + ",教" + subject);
}
}
这样调用 teacher.introduce() 时,输出的就是带科目的介绍内容。
构造函数的处理
子类不会自动继承父类的构造函数,但可以通过 super() 调用父类构造。比如 Student 初始化时也要设置姓名和年龄:
class Student extends Person {
String studentId;
public Student(String name, int age, String studentId) {
super(name, age); // 调用父类构造
this.studentId = studentId;
}
}
如果没有显式调用 super(),Java 会默认调用父类无参构造。如果父类没有无参构造,编译就会报错。
继承的实际好处
项目中用好继承,能大幅减少重复代码。比如多个业务类都需要记录日志,可以写一个基础服务类包含通用的日志方法,其他类继承它就能直接使用。维护时也方便,改一处,所有子类都生效。
不过别滥用继承。只有确实存在“是一种”关系时才适合,比如“学生是一种人”。如果只是想复用工具方法,更适合用组合或工具类。