以下是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.