以下是Java接口和抽象类之间的显着区别。
| 抽象类 | 接口 |
|---|---|
| 抽象类可能包含具体方法。 | 接口的所有方法都是抽象的。 |
| 要使用抽象类,您需要继承它。提供主体以(覆盖)抽象方法(如果有)。 | 要使用接口,您需要实现接口并提供主体以(覆盖)其所有抽象方法。 |
| 抽象类的成员可以是public,private,protected或default。 | 默认情况下,该接口的所有成员都是公共的。 |
public class Tester {
public static void main(String[] args) {
Car car = new Car();
car.setFuel();
car.run();
Truck truck = new Truck();
truck.setFuel();
truck.run();
}
}
interface Vehicle {
public void setFuel();
public void run();
}
class Car implements Vehicle {
public void setFuel() {
System.out.println("Car: Tank is full.");
}
public void run() {
System.out.println("Car: Running.");
}
}
abstract class MotorVehicle {
public void setFuel() {
System.out.println("MotorVehicle: Tank is full.");
}
abstract public void run();
}
class Truck extends MotorVehicle {
public void run() {
System.out.println("Truck: Running.");
}
}输出结果
Car: Tank is full. Car: Running. MotorVehicle: Tank is full. Truck: Running.