2014-10-23 2 views
0

Просто ищет четкое определение следующее:ArrayList <Product> в объявлении класса, как получить доступ к ArrayList

При включении ArrayList<Product> в объявлении класса, и продукт является еще один класс, который содержит некоторые переменные экземпляра. При использовании кода, показанного ниже, инициализируется ли ArrayList при создании объекта?

Например:

public class Basket extends ArrayList<Product> implements Serializable 
{ 
    private int theOrderNum = 0;   // Order number 

    public Basket() 
    { 
    theOrderNum = 0; 
    } 

} 

Если я создаю экземпляр нового класса:

Basket test = new Basket(); 

бы, создать список массива на объекте создается? Чтобы получить доступ к ArrayList внутри объекта, могу ли я использовать this.add(foo);?

+0

Объект ArrayList, и вы можете называть такие вещи, как test.add() –

ответ

2

Класс, который расширяет ArrayList, имеет все методы ArrayList. Создание экземпляра этого класса создало бы ArrayList, так как Basket является ArrayList. Вы можете вызвать все общедоступные методы ArrayList на вашем test экземпляре.

test.add(foo)this.add(foo) из нестатических методов класса Basket) будет работать.

0

Вызвать конструктор вашего расширенного класса как:

public Basket() 
{ 
    super(); 
    theOrderNum = 0; 
} 

Однако следует отдавать предпочтение композиции над наследованием на многих случаях, таких, как ваша:

Prefer composition over inheritance?

+0

Сначала я был не уверен, если ему нужно будет вызвать супер-конструктор, поэтому я написал быстрый тест и работает без вызова 'super()' (хотя добавление 'super()', похоже, ничего не сломает) – Neilos

+0

@Neilos Да вам не нужно вызывать 'super();' явно, компилятор автоматически добавит его для вас. Поскольку класс ArrayList не имеет конструктора arg, вы не получаете никаких ошибок. – user2336315

0

Внутри Basket, в ArrayList, который является Basket, может использоваться через this

Пример, в aMethod

public class Basket extends ArrayList<Product> implements Serializable 
{ 

    // [...] 

    public void aMethod() 
    { 
     add(new Product()); 
     System.out.prinln(size()); 
    } 
} 

С экземпляром теста, таким же образом:

Basket test = new Basket(); 
test.add(new Product()); 
Iterator i = test.iterator(); 
test.aMethod(); 
0

При наследовании класса А из класса В, все открытые и защищенные члены и методы будут использоваться/если вы не переопределите их. В результате, если вы наследуете свой класс от ArrayList, вы можете вызвать его общедоступные методы. Конструктор базового класса может выполнять некоторые инициализации, поэтому неплохо было бы вызвать super в конструкторах вашего подкласса.

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