3.16. Директива abstract

Бывают ситуации, когда нужно определить класс, в котором задана структура какой-либо абстракции, но полная реализация всех методов от­сутствует. В таких случаях вы можете с помощью модификатора типа abstract объявить, что некоторые из методов обязательно должны быть замещены в подклассах. Любой класс, содержащий методы abstract, также должен быть объявлен, как abstract. Поскольку у таких классов отсутствует полная реализация, их представителей нельзя создавать с помощью оператора new. Кроме того, нельзя объявлять абстрактными конструкторы и статические методы. Любой подкласс абстрактного класса либо обязан предоставить реализацию всех абстрактных методов своего суперкласса, либо сам должен быть объявлен абстрактным.

abstract class А { abstract void callmeO; voidmetoo() {

8у81ет.оЩ.рпп11п("Метод metoo класса A");

} }

class В extends A { void callmeO {

8у81ет.оЩ.рпш1п("Метод callme класса В");

}

}

class Abstract {

public static void main(String args[]) {

A a = new B():

a.callme():

a.metoo():

}

}

В нашем примере для вызова реализованного в подклассе класса А метода са11те и реализованного в классе А метода текю используется динамическое назначение методов, которое мы обсуждали раньше.

Метод callme класса В Метод metoo класса А