Вопрос наследования Java: в чем разница и почему?Какие преимущества и гибкость это дает программисту? - PullRequest
2 голосов
/ 30 мая 2011

Если у меня есть класс CountDownClock и он расширяет поток, а в другом классе я объявляю это:

Thread clock = new CountDownClock();

отличается от:

CountDownClock clock = new CountDownClock();

если да, то в чем разница и плюсы / минусы? Могу ли я по-прежнему вызывать родительские методы в последнем из двух объявлений?

Ответы [ 2 ]

4 голосов
/ 30 мая 2011

Если использование переменной clock зависит только от методов, которые предоставляет Thread, то первая альтернатива лучше, так как она делает меньше предположений о конкретном объекте, на который она ссылается.

Если использование clock основано на CountDownClock -специфических методах, то, очевидно, последний вариант - ваш единственный вариант.

Основное правило заключается в том, чтобы при объявлении переменной всегда выбирать наиболее общий тип из возможных.

Та же причина относится к предпочтению

List<String> someList = new ArrayList<String>();

над

ArrayList<String> someList = new ArrayList<String>();

В чем разница и почему?

Если программа компилируется с любой из двух альтернатив, то технически нет никакой разницы вообще. Разница между ними больше связана с техническим обслуживанием. Смотри ниже.

Какие преимущества и гибкость это дает программисту?

Если clock используется только как обычный Thread, то выбор первого объявления упрощает его замену на другой класс потока в будущем. (Если он объявлен как Thread, то вы можете быть уверены, что он будет скомпилирован нормально для любого другого Thread класса, кроме CountDownClock.)

Похожие вопросы:

0 голосов
/ 30 мая 2011

Разница только в типе содержащей переменную.Память, на которую ссылаются обе переменные, будет иметь одинаковую структуру.Вы всегда можете привести любую переменную к другой (помните, что это верно при хранении объекта специализированного класса, а не родительского объекта).

Плюсы / минусы зависят от дизайна вашего приложения.Конечно, лучше использовать больше абстракций, поэтому предпочтительнее использовать Thread вместо CountDownClock, но иногда это невозможно, и вам приходится использовать более специализированные типы (CountDownClock).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...