我目前正在尝试学习Java,但是遇到了一个问题,我对此感到有点困惑。
我有一个超类和两个扩展它的子类,在超类中,我创建了一个要在子类的构造函数中使用的Arraylist,但是我不确定我的解决方案。
我将很高兴为您提供帮助,如果您需要任何其他信息以了解我的问题,请告诉我。
这就是我尝试过的:
public class Superclass{
private String something;
private ArrayList<String> list;
public Superclass(String something){
this.something = something;
list = new ArrayList<String>();
}
}
public class Subclass extends Superclass{
public String someelse;
public Subclass(String name, ArrayList<String> list, String
someelse){
super(name);
this.someelse = someelse;
list = new ArrayList<String>
}
}
它不会消除任何错误,但是是这样做的正确方法,还是有办法在超级括号中使用ArrayList? 我想将其初始化为超类,在子类中添加元素,然后在其他类中使用它。
答案 0 :(得分:0)
抱歉,我没有完全理解这个问题。我建议将Superclass
中的列表设置为受保护的,这样您的Subclass
可以单独访问它,而无需公共访问。见下文:
public class Superclass {
private String name;
protected List<String> list;
public Superclass(String name) {
this.name = name;
this.list = new ArrayList<>();
}
}
public class Subclass {
public String someName;
public Subclass(String name) {
super(name);
this.someName = name;
}
public void add(String string) {
list.add(string); <- because of the list being protected, this refers to the list in the super class
}
}
我的建议是将元素的添加和删除留给Superclass
,除非您计划在列表中添加/删除元素时在Subclass
中进行任何额外的检查。这意味着将add
方法移到Superclass
上,
public class Superclass {
private String name;
protected List<String> list;
public Superclass(String name) {
this.name = name;
this.list = new ArrayList<>();
}
public void add(String string) {
list.add(string);
}
}
public class Subclass {
public String someName;
public Subclass(String name) {
super(name);
this.someName = name;
}
}
然后您将这样创建并使用它(适用于以上两个示例):
Subclass subclass = new Subclass("sub1");
subclass.add("string1"); <- gets added to superclass list
有关范围标识符的更多信息,请参见this。