Я думаю, что в этом случае этот пример приносит больше вреда, чем пользы. Чтобы выполнить какие-либо операции Circle
или Shape
, вам необходимо будет использовать текущий объект. Помимо добавления потенциальных накладных расходов, это может привести к таким проблемам, как несовместимые типы.
Обычно рекомендуется использовать универсальное программирование, так как оно позволяет вашему коду быть гибким. В отличие от примера, который вы опубликовали, рекомендуется только тогда, когда это сделано правильно. Создание всего как объекта почти всегда приносит больше вреда, чем пользы.
Принимая List
в качестве примера, если вы где есть метод, который возвращает ArrayList<String>
в результате: public ArrayList<String> foo()
, то вы обязаны к этому конкретному типу. Если вам нужен связанный список, вам, вероятно, потребуется написать какой-то конвертер, который создает LinkedList<String>
от ArrayList<String>
.
С другой стороны, если вы используете общий интерфейс, ваш метод станет примерно таким: public List<String> foo()
. Это позволит тем, кто когда-либо потребляет foo
, чтобы иметь возможность создавать любую из структур данных, которые реализуют интерфейс List
без необходимости прохождения обручей.
EDIT: Согласно вашему комментарию, большую часть времени это не помогает. Как я уже упоминал в своем ответе, это приносит больше вреда, чем пользы. Одним из примеров, когда работа с объектами имеет смысл, является метод readObject()
, предоставляемый ObjectInputStream
. Этот метод используется, когда вы читаете пользовательский объект, о котором ObjectInputStream
не знает. Поскольку в Java все расширяет класс Object
, этот метод дает объект. Даже тогда, каждая иллюстрация, которую я видел в этом методе, они в конце концов отбросили ее на что-то другое.
Пример вы предоставили, может быть хорошей практикой в очень редких случаях. Для меня это ужасно. –
Введение в программирование на Java звучит как ужасно плохая книга, или ОП понимает что-то неправильно. – Kayaman
В большинстве случаев самый простой и понятный код лучше всего. Вероятно, пример, который они предоставляют, не является хорошим. –