Вы правы, что удаление ключевых слов abstract
и реализация абстрактных методов делают класс неабстрактным.
Однако обычно вы не хотите превращать сам класс из абстрактного в неабстрактный.Класс не является абстрактным, пока вы не добавите это ключевое слово, поэтому у вас (или кого-то еще), очевидно, была причина убедиться, что это не обычный класс, а абстрактный.
Если вы думаете об этом оченьвысокий уровень (далеко от Java), то «дерево» - это то, что вы умеете рисовать.Точно так же вы можете представить себе подкласс «Круг», для которого вы знаете, как должен выглядеть рисунок.Однако для очень общего «рисунка» вы понятия не имеете, что значит нарисовать его.
Это идея того, почему фактический рисунок остается abstract
в вашем классе Figure
.Следовательно, вы не должны делать Figure
неабстрактным, а вместо этого сосредотачиваться на классах, которые выходят из него и делают их неабстрактными, путем реализации всех абстрактных методов из Figure
.В вашем классе Tree
вы знаете, что должен делать drawHere
, поэтому используйте его для печати дерева.В другом классе, например Circle
, вы реализуете его по-другому, но на самом деле никогда не имеет смысла реализовывать его в Figure
, где вы не знаете, что рисовать.