只是寻找以下内容的明确定义:
当您在类声明中包含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);
吗?
答案 0 :(得分:2)
扩展ArrayList的类具有ArrayList的所有方法。实例化此类将创建一个ArrayList,因为Basket是一个ArrayList。您可以在test
实例上调用ArrayList的所有公共方法。
test.add(foo)
(以及来自Basket类的非静态方法中的this.add(foo)
)可以正常工作。
答案 1 :(得分:0)
将扩展类的构造函数调用为:
public Basket()
{
super();
theOrderNum = 0;
}
但是在很多情况下你应该更喜欢构图而不是继承:
答案 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
并不是一个坏主意。