-
使用意图: - 接口:定义了一个完全抽象的合同,用于描述类具备哪些方法,而不关心这些方法的具体实现。
- 抽象类:为子类提供了一个共同的基础框架,可以包含方法的实现细节。
-
默认行为:
- 接口中声明的方法默认是 public 和 abstract 的,并且从 Java 8 开始,接口还可以含有默认(default)和静态(static)方法。
- 抽象类中可以有非抽象的方法,即包含方法的实现,也可以包含状态(字段或属性)。
-
多继承:
- 接口支持多继承,一个类可以实现多个接口。
- 抽象类不支持多继承,一个类只能继承一个抽象类。
-
状态维护:
- 接口不能包含实例字段(即状态),所有成员变量默认是 public static final 的。
- 抽象类可以有实例变量,可以维护状态。
-
构造器:
- 接口不能有构造器因为它们不能被实例化。
- 抽象类可以有构造器,虽然抽象类不能直接实例化,但构造器可以在子类中通过 super()被调用。
-
访问修饰符:
- 接口中的方法只能是 public 或者省略(默认是 public)。
- 抽象类中的方法可以有 public、protected 和 private 访问级别。
举个栗子
:
// 定义一个接口 Shape
public interface Shape {
double getArea();
// 计算面积
}
// 使用抽象类 AbstractShape 提供一些共同的功能
public abstract class AbstractShape implements Shape {
protected String color;
public AbstractShape(String color) {
this.color = color;
} // 抽象方法
@Override
public abstract double getArea();
// 非抽象方法
public String getColor() {
return color;
}
}// 具体类 Circle 继承自抽象类 AbstractShape
public class Circle extends AbstractShape {
private double radius;
public Circle(double radius, String color) {
super(color);
this.radius = radius;
}
@Override
public double getArea() {
return Math.PI * radius * radius;
}
}// 另一个具体类 Rectangle 实现接口 Shape
public class Rectangle implements Shape {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
@Override
public double getArea() {
return width * height;
}
}
- Shape 接口定义了计算面积的合同。
- AbstractShape 抽象类实现了 Shape 接口并提供了颜色属性和构造器。
- Circle 类继承了 AbstractShape 并具体实现了计算面积的方法。
- Rectangle 类直接实现了 Shape 接口,并没有从 AbstractShape 继承颜色属性。
本篇文章来源于微信公众号: 互联网面试小帮手
微信扫描下方的二维码阅读本文

:
Comments NOTHING