确认此继承有效

时间:2012-02-12 14:11:31

标签: java inheritance relationship

我正在创建一个CustomerList类,目前:

package somestuff;

import java.util.ArrayList;

public class CustomerList {

    ArrayList<Customer> custList;

}

我希望它扩展ArrayList;这是一个有效的“is-a”关系(CustomerList是一个ArrayList)?

编辑:道歉,我没有说清楚这篇文章。我的计划是将其作为JSP网站的一部分;我将查询数据库并使用Customer和CustomerList来存储结果。我的理论是,如果我想改变它们输出的顺序,它会使事情变得更容易。

4 个答案:

答案 0 :(得分:3)

不,这是has-a关系。 is-a将是扩展(class)或实现(接口)。

在需要时使用ArrayList<Customer>会不会更简单?

答案 1 :(得分:0)

如果你想真正扩展ArrayList,正确的方法是:

public class CustomerList extends ArrayList<Customer> {

    // ... add/override methods here

}

您想要添加哪种功能?

答案 2 :(得分:0)

您可以通过扩展(如Binyamin Sharet所说)或通过扩展is-a接口并将方法的执行委派给java.util.List来将其转换为custList关系(查找Joshua Bloch)。

答案 3 :(得分:0)

您也可以使用委托。

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
}

这取决于你想做什么。 但是,使用组合物更简单,更好。