Java 抽象类

在 Java 中,抽象类(Abstract Class)是一种特殊的类,它不能被直接实例化,主要用于作为其他类的基类(父类),封装子类的共性特征并定义必须实现的规范。

一、抽象类的定义

抽象类通过 abstract 关键字修饰,语法格式如下:
 
 
abstract class 类名 {
    // 成员变量
    // 普通方法(有方法体)
    // 抽象方法(无方法体,用abstract修饰)
}
 

二、抽象类的核心特点

  1. 不能实例化
    抽象类无法通过 new 关键字创建对象,只能作为父类被继承。
  2. 可以包含抽象方法
    抽象方法是没有方法体的方法,用 abstract 修饰,格式为:
    abstract 返回值类型 方法名(参数列表);
    抽象方法的作用是定义子类必须实现的规范,子类必须重写父类所有的抽象方法(除非子类也是抽象类)。
  3. 可以包含普通成员
    抽象类可以有普通方法(带方法体)、成员变量、构造方法(供子类调用)等。
  4. 单继承限制
    一个类只能继承一个抽象类(Java 单继承特性),但抽象类可以实现多个接口。

三、抽象类的使用场景

  • 当多个类存在共性特征(属性或方法),但部分行为(方法)无法在父类中具体实现时,可将父类定义为抽象类。
  • 例如:几何图形(圆形、矩形等)都有 “计算面积” 的行为,但具体计算方式不同,可将 “图形” 定义为抽象类,“计算面积” 定义为抽象方法。

四、示例代码

下面通过 “图形计算面积” 的例子展示抽象类的用法:

// 抽象类:图形
abstract class Shape {
    // 普通成员变量:颜色
    String color;

    // 构造方法(供子类调用)
    public Shape(String color) {
        this.color = color;
    }

    // 普通方法:获取颜色
    public String getColor() {
        return color;
    }

    // 抽象方法:计算面积(子类必须实现)
    public abstract double getArea();
}

// 子类:圆形(继承抽象类Shape)
class Circle extends Shape {
    double radius; // 半径

    public Circle(String color, double radius) {
        super(color); // 调用父类构造方法
        this.radius = radius;
    }

    // 必须重写抽象方法getArea()
    @Override
    public double getArea() {
        return Math.PI * radius * radius;
    }
}

// 子类:矩形(继承抽象类Shape)
class Rectangle extends Shape {
    double length; // 长
    double width;  // 宽

    public Rectangle(String color, double length, double width) {
        super(color);
        this.length = length;
        this.width = width;
    }

    // 必须重写抽象方法getArea()
    @Override
    public double getArea() {
        return length * width;
    }
}

// 测试类
public class Test {
    public static void main(String[] args) {
        // 抽象类不能实例化,以下代码会报错:
        // Shape shape = new Shape("红色"); 

        // 通过子类实例化,并调用方法
        Shape circle = new Circle("蓝色", 2.0);
        System.out.println("圆形面积:" + circle.getArea()); // 输出:12.566...

        Shape rectangle = new Rectangle("红色", 3.0, 4.0);
        System.out.println("矩形面积:" + rectangle.getArea()); // 输出:12.0
    }
}
 

五、抽象类 vs 接口

特性抽象类接口(Java 8+)
关键字 abstract class interface
继承 / 实现方式 单继承(extends 多实现(implements
方法类型 可包含抽象方法和普通方法 可包含抽象方法、默认方法、静态方法
成员变量 可包含任意成员变量 只能是常量(public static final
构造方法 有构造方法(供子类调用) 无构造方法

总结

抽象类是 Java 中实现代码复用和规范定义的重要机制,它通过抽象方法约束子类的行为,同时通过普通方法封装共性逻辑,是实现多态的重要手段。

posted on 2025-09-16 08:47  coding博客  阅读(91)  评论(0)    收藏  举报