Java 中的抽象类与接口的区别是什么?(附演示代码)

更新时间 2023-04-03 20:11:27

Java 中,抽象类和接口都是用来实现多态性的重要工具,它们之间的区别如下:

  1. 实现方式不同:抽象类通过继承来实现,而接口通过实现(implements)来实现。
  2. 方法实现的不同:抽象类可以有实现的方法,也可以有抽象方法,而接口只能有抽象方法,方法默认为 public abstract,不能有方法实现。
  3. 构造器的不同:抽象类可以有构造器,而接口不能有构造器。
  4. 常量的不同:抽象类可以有成员变量,可以是任意类型的变量,而接口只能有 public static final 类型的常量。

下面是一个抽象类和接口的示例代码:

// 定义一个抽象类 Shape
abstract class Shape {
    protected String color;

    public Shape(String color) {
        this.color = color;
    }

    // 抽象方法 getArea,计算图形面积
    public abstract double getArea();

    // 定义实现方法 getColor,获取颜色
    public String getColor() {
        return color;
    }
}

// 定义一个接口 InterfaceShape
interface InterfaceShape {
    public static final int MAX_AGE = 100;

    // 定义抽象方法,计算图形面积
    public abstract double getArea();
}

// 实现接口 InterfaceShape 的类 Circle
class Circle implements InterfaceShape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    // 实现接口的抽象方法 getArea,计算圆形面积
    @Override
    public double getArea() {
        return Math.PI * radius * radius;
    }
}

public class Main {
    public static void main(String[] args) {
        // 使用抽象类 Shape
        Shape shape = new Circle("red", 2.0);
        System.out.println("Shape color: " + shape.getColor());
        System.out.println("Shape area: " + shape.getArea());

        // 使用接口 InterfaceShape
        InterfaceShape shape2 = new Circle(3.0);
        System.out.println("Shape area: " + shape2.getArea());
        System.out.println("Max age: " + InterfaceShape.MAX_AGE);
    }
}

在上面的代码中,Shape 是一个抽象类,其中定义了一个抽象方法 getArea(),和一个实现方法 getColor(),包含一个实例变量 color。Circle 类实现了接口 InterfaceShape,并实现了 getArea() 方法。在 Main 类中,分别使用抽象类 Shape 和接口 InterfaceShape 创建了 Circle 类的实例对象,实现了多态性的应用。可以看到,抽象类和接口都是实现多态性的工具,但是在具体的实现方式、方法实现、构造器、常量等方面有所不同。