子类的概念与作用
在Java面向对象编程中,子类(Subclass)是继承自父类(Superclass)的类,它能够自动获取父类的属性和方法,并可以在此基础上扩展新的功能或重写已有行为,继承是Java实现代码复用和扩展的核心机制,通过子类与父类的关系,可以构建层次化的类结构,使程序更加模块化、易维护,若已有一个“动物”类作为父类,可以创建“狗”“猫”等子类,它们不仅继承“动物”的通用属性(如名字、年龄)和方法(如吃、睡),还能添加自身特有的行为(如狗的“叫”、猫的“抓老鼠”)。

创建子类的基本语法
创建子类需要使用extends关键字,其基本语法格式如下:
class 子类名 extends 父类名 {
// 子类的属性和方法
}
extends表示继承关系,子类将自动拥有父类中非private修饰的成员(属性和方法),若存在父类Animal,创建子类Dog的代码如下:
class Animal {
String name;
public void eat() {
System.out.println(name + "正在吃东西");
}
}
class Dog extends Animal {
// 子类特有属性
String breed;
// 子类特有方法
public void bark() {
System.out.println(name + "正在汪汪叫");
}
}
上述代码中,Dog类继承了Animal类的name属性和eat()方法,无需重复编写即可直接使用,同时新增了breed属性和bark()方法。
子类的构造方法
子类的构造方法与父类密切相关,当创建子类对象时,Java会先调用父类的构造方法,再执行子类的构造方法,以确保父类成员的初始化完成,这一过程通过super()关键字实现,super()用于调用父类的构造方法,且必须位于子类构造方法的第一行。
若父类有无参构造方法,子类构造方法会隐式调用super(),无需显式写出;若父类只有带参构造方法,子类必须通过super(参数列表)显式调用。

class Animal {
String name;
// 父类带参构造方法
public Animal(String name) {
this.name = name;
}
}
class Dog extends Animal {
String breed;
// 子类构造方法,必须显式调用父类带参构造方法
public Dog(String name, String breed) {
super(name); // 调用父类构造方法初始化name
this.breed = breed;
}
}
若尝试创建子类对象时不调用父类构造方法,编译器会报错,因为子类依赖父类的初始化逻辑。
方法重写与重载
方法重写(Override)
方法重写是指子类重新定义父类已有的方法,以实现不同的行为,重写时需满足以下规则:
- 方法签名(方法名+参数列表)必须与父类方法完全一致;
- 返回类型必须与父类方法相同或是其子类(协变返回类型);
- 访问权限不能比父类方法更严格(如父类为
public,子类不能为protected); - 抛出的异常不能比父类方法更广泛。
重写方法时,可以使用@Override注解,它能让编译器检查是否满足重写规则,避免因方法签名错误导致重写失败。
class Animal {
public void move() {
System.out.println("动物在移动");
}
}
class Dog extends Animal {
@Override
public void move() {
System.out.println("狗在奔跑"); // 重写父类的move方法
}
}
方法重载(Overload)
方法重载与继承无关,指在同一个类中定义多个同名方法,但参数列表不同(参数个数、类型或顺序不同),子类可以重载父类的方法,扩展其功能:
class Dog extends Animal {
// 重载父类的eat方法,增加参数
public void eat(String food) {
System.out.println(name + "正在吃" + food);
}
}
super关键字的使用
super关键字用于在子类中访问父类的成员,包括:

- 调用父类的属性:
super.属性名; - 调用父类的方法:
super.方法名(参数列表); - 调用父类的构造方法:
super(参数列表)(仅可在构造方法第一行使用)。
在子类中重写方法时,若需保留父类的原有逻辑,可通过super调用:
class Dog extends Animal {
@Override
public void eat() {
super.eat(); // 调用父类的eat方法
System.out.println("狗吃得很香"); // 扩展子类逻辑
}
}
子类的访问控制与继承范围
子类继承父类时,并非所有成员都能被继承,具体规则如下:
public修饰的成员:子类完全继承,可直接访问;protected修饰的成员:子类继承,且可在子类类体内直接访问;- 默认(包私有)修饰的成员:仅当子类与父类在同一包中时,子类才能继承;
private修饰的成员:子类无法直接继承,只能通过父类的公共方法间接访问。
子类不能继承父类的构造方法,但可以通过super调用。
继承的注意事项
- 单继承限制:Java只支持单继承,即一个子类只能有一个直接父类,但可以通过多层继承实现(如A→B→C)。
- 避免滥用继承:继承应满足“is-a”(是一个)关系,狗是一个动物”,而非“has-a”(有一个)关系(后者应通过组合实现)。
- 构造方法链:创建子类对象时,会逐层调用父类构造方法,形成构造方法链,需确保父类构造方法逻辑正确。
通过以上步骤和规则,即可在Java中正确创建子类,充分利用继承机制构建高效、可扩展的程序结构,理解子类的创建逻辑和特性,是掌握Java面向对象编程的重要基础。




















