簡體   English   中英

如何在子類的構造函數中從超類實現arraylist?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM