2014-02-16 3 views
0

Что именно это означает, когда у вас есть коллекция < имя интерфейса> variable = null;<Interface> name = null;

Какая переменная это?

Я думал, что сама коллекция была интерфейсом.

перефразировать Вопрос:

Предположим, у вас есть интерфейс.

public interface stack 
{ 
String push(); 

String pop(); 

} 

и приведены

Collection<stack> myname = null ; 

в некотором классе

как бы вы заселить MyName?

+0

Что это значит, если вы были 'Collection <имя класс> '? Это означает то же самое. –

+0

Пожалуйста, узнайте «Дженерики», его сложно описать здесь «на лету» http://docs.oracle.com/javase/tutorial/extra/generics/ –

+1

даже не дженерики, сначала прочитайте о ссылках: http: //docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.3 – alex

ответ

1

Что вы описываете - это полиморфизм, и да Коллекция - это интерфейс. В нем описывается контракт, который может ожидать каждый клиент коллекции, и что каждая реализация Коллекции должна соблюдаться. В какой-то момент переменная должна указывать на фактическую реализацию, такую ​​как ArrayList, которая соответствует контракту.

В коллекции также есть другая форма полиморфизма в виде дженериков. Таким образом, коллекция может содержать объекты определенного типа, которые будут определены при объявлении коллекции. Тип сам может быть интерфейс, но основные элементы коллекции должны быть конкретные реализации типа объявленного

Например:

// ArrayList honours the contract of Collection 
// All members must be a String 
Collection<String> var = new ArrayList<String>(); 

// HashSet honours the contract of Collection 
// All members must be one of the implementing classes of Principal 
Collection<Prinicpal> users = new HashSet<Principal>(); 
0

Collection<stack> myname обозначает коллекцию объектов, которые относятся к классу, который реализует интерфейс stack. Чтобы создать и заполнить что-то вроде этого:

Collection<stack> myname = new ArrayList<stack>(); 
myname.add(new MyStack()); 


// Where 
class MyStack implements stack { ... } 

Есть ли какие-либо замечания в этом вопросе? Наверное, нет.

1

В этом случае стек будет тип элементов в коллекции, вы могли бы заполнить его с чем-то вроде этого:

Collection<stack> myName = new ArrayList<stack>(); 
myName.add(new stackImpl()); 

Being stackImpl класс, реализующий стек и ArrayList класс, реализующий коллекции.

+0

Спасибо, у меня было задание на собеседование Вопрос, и я сделал именно это, но мне интересно, что это делает выполните, почему у вас будет коллекция интерфейсов? – RandomGuy

+1

Причина заключается в том, чтобы иметь возможность хранить различные типы экземпляров с общим интерфейсом. Например, вы можете добавить в набор множество типов экземпляров, например String или Integer, а затем, когда вы итерируете коллекцию, вы можете поместить итерированный элемент в переменную Comparable и вызвать метод сравнения для каждого экземпляра. Таким образом, вы менее привязаны к реализации, которую вы выполняете. –

Смежные вопросы