Подтверждение того, что это наследование действительно

Я создаю класс CustomerList, в настоящее время:

package somestuff;

import java.util.ArrayList;

public class CustomerList {

    ArrayList<Customer> custList;

}

Я хочу, чтобы он расширил ArrayList; будет ли это действительным отношением «является» (CustomerList является ArrayList)?

Редактировать: Извините, я не сделал этот пост слишком ясным. Мой план состоит в том, чтобы сделать это частью веб-сайта JSP; Я бы запросил базу данных и использовал бы Customer и CustomerList для сохранения результатов. Моя теория состоит в том, что было бы проще, если бы я захотел изменить порядок их вывода.


person Thomas Richards    schedule 12.02.2012    source источник
comment
нет, этот список клиентов содержит список массивов   -  person Ray Tayek    schedule 12.02.2012
comment
Если это домашнее задание, добавьте тег «домашнее задание».   -  person Greg Mattes    schedule 12.02.2012


Ответы (4)


Нет, это отношения has-a. is-a будет, если вы расширите (класс) или реализуете (интерфейс).

Не проще ли просто использовать ArrayList<Customer> при необходимости?

person MByD    schedule 12.02.2012
comment
Вероятно, есть операции, которые вам понадобятся на CustomerList в дополнение к тем, которые предоставляет ArrayList<Customer>. И наоборот, вероятно, в ArrayList<Customer> есть операции, которые вам особенно не нужны. Учитывая информацию, трудно понять, почему List предпочтительнее Set, или почему именно эта конкретная реализация должна быть. - person Tom Hawtin - tackline; 12.02.2012
comment
Верно, но я не видел таких операций в примере ОП. - person MByD; 12.02.2012

Если вы хотите действительно расширить ArrayList, правильный метод:

public class CustomerList extends ArrayList<Customer> {

    // ... add/override methods here

}

Какой функционал вы хотите добавить?

person Bart van Heukelom    schedule 12.02.2012
comment
Мой план состоял в том, чтобы сделать это частью веб-сайта JSP; Я бы запросил базу данных и использовал бы Customer и CustomerList для сохранения результатов. Моя теория состоит в том, что было бы проще, если бы я захотел изменить порядок их вывода. - person Thomas Richards; 12.02.2012

Вы можете превратить это в отношение is-a, либо расширив (как сказал Биньямин Шарет), либо расширив интерфейс java.util.List и делегировав выполнение методов custList (поищите Джошуа Блоха).

person Sean Kelleher    schedule 12.02.2012

Вы также можете использовать делегирование.

class Customer{}
class CustomerList extends AbstractList<Customer>{

    private final List<Customer> customers;
    public CustomerList(List<Customer> customers){
        this.customers = customers;
    }
    @Override
    public Customer get(int index) {
        return customers.get(index);
    }

    @Override
    public int size() {
        return customers.size();
    }

    //Override more methods as needed
}

Это зависит от того, что вы хотите сделать. Однако использовать состав проще и приятнее.

person Bogdan T.    schedule 12.02.2012