Java 中的抽象类与接口的区别是什么?(附演示代码)
Java 中,抽象类和接口都是用来实现多态性的重要工具,它们之间的区别如下:
- 实现方式不同:抽象类通过继承来实现,而接口通过实现(implements)来实现。
- 方法实现的不同:抽象类可以有实现的方法,也可以有抽象方法,而接口只能有抽象方法,方法默认为
public abstract
,不能有方法实现。 - 构造器的不同:抽象类可以有构造器,而接口不能有构造器。
- 常量的不同:抽象类可以有成员变量,可以是任意类型的变量,而接口只能有
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 类的实例对象,实现了多态性的应用。可以看到,抽象类和接口都是实现多态性的工具,但是在具体的实现方式、方法实现、构造器、常量等方面有所不同。