Объявляя реферат метода, вы не предоставляете реализацию, но заставляете конкретные классы, расширяющие класс car
, предоставлять реализацию метода. Пример:
abstract public class Car {
abstract void drive();
}
public class Audi extends Car {
void drive() {
System.out.println("I'm an Audi.");
}
}
public class Volvo extends Car {
void drive() {
System.out.println("I'm a Volvo.");
}
}
Невозможность предоставить реализацию приведет к ошибке компиляции.
Теперь, из этого примера вы можете легко увидеть, что, поскольку экземпляры Audi
и Volvo
могут быть размещены там, где ожидается Car
, вы можете подключать различные варианты поведения во время выполнения (это называется полиморфизмом) :
void driveCar(Car car) {
car.drive();
}
void testDrive() {
driveCar(new Audi()); // prints I'm an Audi
driveCar(new Volvo()); // prints I'm a Volvo
}