类声明中的ArrayList <product>如何访问ArrayList </product>

时间:2014-10-23 14:31:36

标签: java class arraylist

只是寻找以下内容的明确定义:

当您在类声明中包含ArrayList<Product>时,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);吗?

4 个答案:

答案 0 :(得分:2)

扩展ArrayList的类具有ArrayList的所有方法。实例化此类将创建一个ArrayList,因为Basket是一个ArrayList。您可以在test实例上调用ArrayList的所有公共方法。

test.add(foo)(以及来自Basket类的非静态方法中的this.add(foo))可以正常工作。

答案 1 :(得分:0)

将扩展类的构造函数调用为:

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

但是在很多情况下你应该更喜欢构图而不是继承:

Prefer composition over inheritance?

答案 2 :(得分:0)

Basket内,可以通过Basket使用ArrayList,即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();

答案 3 :(得分:0)

当您从B类继承A类时,除非您覆盖它们,否则所有public和protected成员和方法都是可用/可调用的。因此,如果从ArrayList继承您的类,则可以调用其公共方法。基类的构造函数可能正在进行一些初始化,因此在子类的构造函数中调用super并不是一个坏主意。