抽象类用abstract关键字定义,不能被实例化,必须被继承;含抽象方法的类必为抽象类,但抽象类可无抽象方法;抽象方法只有声明无实现,子类须全部重写。

Java 中抽象类用 abstract 关键字定义,必须包含 abstract class 类名 { ... } 语法;若类中声明了抽象方法,该类就必须声明为抽象类。
抽象类的基本定义方式
抽象类不能被 new 实例化,只用于被继承。定义时需加 abstract 修饰符:
- 类声明必须写成 public abstract class Animal { ... }(访问修饰符可选,但 abstract 不可省)
- 可以有构造方法——虽然不能直接调用,但子类实例化时会自动或显式调用它来初始化父类字段
- 可以包含普通字段(如 protected String name;)、普通方法(有方法体)、静态方法、甚至 main 方法
抽象方法的声明规则
抽象方法是只有声明、没有实现的方法,必须出现在抽象类中:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 语法为 abstract 返回类型 方法名(参数);(结尾是分号,不能有 {})
- 不能用 private、final 或 static 修饰——因为它们与“强制子类重写”的语义冲突
- 抽象方法默认是 public 或 protected,不写访问修饰符时按包内可见处理(但建议显式写 public)
抽象类与抽象方法的强制关系
Java 编译器对二者有硬性约束:
- 只要类里有一个抽象方法,这个类就必须声明为 abstract
- 反过来,抽象类可以没有抽象方法(虽少见,但合法),比如仅作模板统一构造逻辑或提供部分共用实现
- 非抽象子类继承抽象类后,必须用 @Override 实现全部抽象方法;否则编译报错
一个典型示例
下面代码展示了完整结构:
public abstract class Shape {
protected String color;
// 抽象类的构造方法
public Shape(String color) {
this.color = color;
}
// 普通方法(子类可直接使用)
public void showColor() {
System.out.println("颜色:" + color);
}
// 抽象方法(子类必须实现)
public abstract double area();
public abstract void draw();
}
像 Circle extends Shape 这样的子类,就得提供 area() 和 draw() 的具体实现,否则无法编译通过。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










