2012-02-06 2 views
1

В Java:Есть ли Parent obj = new Child(); смысл?

Parent obj = new Child(); 

Я создал объект типа Parent. Я предполагаю, что я могу только вызывать методы, определенные в классе родителя. Таким образом, я не могу вызывать «дополнительные» методы, определенные в Ребенке или переменные доступа, определенные в Child. Так что я думаю, что это пустая трата памяти, так как я представил новый экземпляр Child, который занимает дополнительное пространство памяти, чем Parent. К этому моменту я думаю, что это не имеет смысла. Может ли кто-нибудь указать причину/пример, где это имеет смысл?

ответ

4

Да, это имеет смысл.

Вы бы сделали это, если хотите использовать ребенка, но ограничите свое взаимодействие с ним методами Parent.

Эта идиома особенно часто встречается с Java коллекции:

List<String> myList = new ArrayList<String>(); 
+0

Наиболее часто используется, когда класс родителя является абстрактным или когда класс Родитель является частью открытого интерфейса для библиотеки и Детский класс - это деталь реализации. –

2

Да, это часть концепции программирования полиморфизм и наследование.

1

Эта идиома используется для изменения конкретной реализации. По словам Джошуа Блох в Effective Java (пункт 52)

Если вы получаете в привычку использовать интерфейсы типов, ваша программа будет гораздо более flexible.If вы решите, что вы хотите перейти реализации, все что вам нужно сделать это - изменить имя класса в конструкторе (или использовать другой статический завод)