抽象类可含普通方法、抽象方法、构造方法和静态方法,但不可实例化;抽象方法无方法体、必须被子类重写(除非子类也抽象),且不能是private、static或final;普通方法可直接实现并被继承调用;构造方法供子类初始化时调用;静态方法属类本身,不可重写。

抽象类中可以编写普通方法、抽象方法,也可以有构造方法和静态方法,但不能被实例化。
抽象方法必须用 abstract 修饰且无方法体
抽象方法只声明不实现,子类必须重写(除非子类也是抽象类)。语法格式如下:
abstract void doSomething(); // 不能有大括号,不能有方法体
- 抽象方法只能定义在抽象类或接口中
- 抽象方法不能是 private、static 或 final(它们与“强制子类实现”矛盾)
- 抽象方法的访问修饰符可以是 public、protected 或默认(包级私有)
普通方法可直接实现,供子类继承调用
抽象类中的非抽象方法和普通类一样,可以有完整的方法体,子类自动继承,也可选择重写:
void sayHello() {
System.out.println("Hello from abstract class");
}
- 这类方法常用于提供通用逻辑,比如初始化、工具性操作
- 子类可通过 super.sayHello() 显式调用父类实现
- 即使类中有抽象方法,普通方法依然可被直接调用(通过子类实例)
构造方法用于初始化,由子类构造器隐式/显式调用
抽象类可以有构造方法,虽然不能 new,但子类创建对象时会先调用它:
public Animal(String name) {
this.name = name;
}
- 子类构造器第一行默认为 super();若父类无无参构造,需显式调用 super(…)
- 构造方法不是抽象的,也不参与多态,仅用于初始化抽象类部分的字段
静态方法和静态字段照常使用,但不可被重写
抽象类支持 static 方法,它属于类本身,通过类名直接调用:
static void printInfo() {
System.out.println("This is an abstract class");
}
- 静态方法不能被重写(只能被隐藏),子类定义同签名 static 方法属于新方法
- 建议避免在抽象类中过度依赖静态方法,以免削弱面向对象设计意图
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











