Рассмотрим следующее:
public interface Animal {
bool isVertebrate();
bool isDomesticable();
}
и абстрактный класс, реализующий этот интерфейс:
abstract class Cat implements Animal {
public bool isVertebrate() {return true;}
public void dealWithCat(){
if (isDomesticable()){
...
}
}
Но реализация для isDomesticable
делегирована подклассу:
public class Tiger extends Cat {
public bool isDomesticable(){
return false;
}
Поскольку Cat является abstract
, его нельзя создать.Это бесплатно предоставить реализацию для некоторых методов интерфейса, но не обязательно предоставлять ее для каждого метода.Методы, для которых он не обеспечивает реализацию, должны быть предоставлены подклассом.И во время выполнения методы в суперклассе получают реализацию из подкласса.Таким образом, в нашем примере реализация isDomesticable()
не предоставляется Cat, но позже она реализуется Tiger.