Пятница, 2025-07-18, 22:03:52
Главная Регистрация RSS
Приветствую Вас, Гость
Форма входа
Мини-чат
Главная » 2011 » Декабрь » 5 » Пременная типа "интерфейс" со значением типа "класс"
12:49:44
Пременная типа "интерфейс" со значением типа "класс"
Вопрос:

List list = new ArrayList();

В данном случае не имеют значения конкретные классы, коллекции были выбраны просто так ради примеров. То есть я понимаю - полиморфизм и восходящее преобразование к базовому классу. Переменная list будет иметь тип List, но при этом будут выполняться методы производного класса. Но вот я впритык понять не могу зачем так писать??? Почему просто нельзя написать

ArrayList list = new ArrayList();

Ведь данный класс все равно является производным от Лист. Он все равно к примеру ,если написать метод с параметром в виде объекта базового класса и запустить с параметром производного - будет происходить преобразование. Зачем так писать?

Ответ:

Таким образом гарантируется, что Вы не вызовете лишних методов - только то, что есть в интерфейсе List. И в случае необходимости замены его на LinkedList, Vector, CopyOnWriteArrayList или на собственную реализацию - Вы поменяете только одну строчку. А не будете вычищать по всему коду, где вы тут чего наиспользовали, чего нет в новой реализации.
Просмотров: 736 | Добавил: MINIsha
Всего комментариев: 2
2 CHerry  
0
Единственное... list , насколько я понимаю - это экземпляр класса List, а не переменная.
Ведь List - это класс реализующий интерфейс ?

1 CHerry  
0
Спасибо, понятно.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]