抽象类不能直接实例化,子类必须继承并实现全部抽象方法才能创建对象;若子类不实现则自身须声明为abstract。

抽象类本身不能直接创建对象,必须由子类继承并补全所有抽象方法后,才能实例化。关键在于“继承 + 强制实现”的组合机制。
子类必须用 extends 继承抽象类
Java 只支持单继承,子类通过 extends 明确指定父类为抽象类。即使该父类没有具体方法,只要声明为 abstract class,子类就必须遵守继承规则:
- 子类若不是抽象类,必须重写父类中全部抽象方法
- 子类可以继承父类的普通方法、构造方法、成员变量(非 private)
- 子类构造器中默认或显式调用
super(),先完成父类初始化
抽象方法必须被 @Override 实现
抽象方法只有声明,没有方法体(即花括号 {} 缺失)。子类实现时需:
- 方法名、参数列表、返回值类型与父类抽象方法完全一致
- 添加
@Override注解(推荐,便于编译检查) - 访问权限不能比父类更严格(如父类是
public abstract,子类实现也必须是public)
例如:public abstract void run(); 在子类中必须写成:@Override public void run() { /* 具体逻辑 */ }
不实现全部抽象方法?子类也得标 abstract
如果子类暂时无法或不愿提供某个抽象方法的具体逻辑,它可以选择自身也声明为抽象类:
- 这样就不用实现全部抽象方法,但依然不能被 new 出对象
- 相当于把实现责任继续向下传递,直到某个具体子类完成全部覆盖
- 常见于多层抽象体系,比如:Animal → Mammal → Dog
典型代码结构示意
父类(抽象):
abstract class Vehicle {
protected String brand;
protected int speed;
public Vehicle(String brand, int speed) {
this.brand = brand;
this.speed = speed;
}
public abstract void run(); // 抽象方法
public void stop() { // 普通方法,可直接继承使用
System.out.println(brand + " 停下了");
}
}子类(具体):
class Car extends Vehicle {
public Car(String brand, int speed) {
super(brand, speed); // 调用父类构造
}
@Override
public void run() { // 必须实现
System.out.println(brand + "以" + speed + "km/h在公路上行驶");
}
}使用:
Car car = new Car("Toyota", 120);
car.run(); // 输出具体行为
car.stop(); // 复用父类普通方法Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











