Почему класс должен быть абстрактным, если у него есть хотя бы один абстрактный метод?
По какой причине я не могу создать конкретный класс с абстрактными методами в нем?
Это принудительно только для того, чтобы убедиться, что ни один объект не создан без определения абстрактного метода? или есть другая вероятная причина этого ограничения?
4 ответа
abstract
класс по определению неполон. Таким образом, вы не должны быть в состоянии создать экземпляр abstract
классы. Интересным побочным эффектом этого определения является то, что вы можете создать abstract
классы, которые имеют все конкретные методы. Просто вы думаете, что ваш класс неполон и не может быть создан.
Потому что когда вы создаете абстрактный класс, вы находитесь в середине уровня абстракций. Я имею в виду, что у вас есть несколько вопросов об обязанностях класса, или этот класс должен что-то делать, но им все равно, как, частично. Если вы не хотите иметь реализованный метод, вы должны создать интерфейс. По моему мнению, ответ заключается в классе обязанностей и абстракции, а не в сфере технологий.
abstract
класс в Java-контестексе определяется как класс имеет по крайней мере один abstract
метод. А абстрактный метод - это просто не реализованный метод. Это дизайнерское решение, которое было только что скопировано из C++, где оно точно такое же. Разница лишь в том, что в C++ вам не нужно сообщать компилятору, что класс является абстрактным, компилятор знает это даже без вашего ведома. Почему это дизайнерское решение было принято в C++, я не могу вам сказать, но наличие его устраняет полный класс ошибок. Ошибка, которую вызывает метод класса, вызванный, когда метод не реализован в этом подклассе.
Вы правы, причина в том, чтобы предотвратить создание объекта без реализации метода или более.