![](/img/trans.png)
[英]Passing an ArrayList of subclass to a constructor that takes ArrayList of superclass?
[英]How to implement an arraylist from a superclass in the constructor of a subclass?
我目前正在嘗試學習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? 我想將其初始化為超類,在子類中添加元素,然后在其他類中使用它。
抱歉,我沒有完全理解這個問題。 我建議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 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.