如何在子类的构造函数中从超类实现arraylist?

时间:2019-07-14 12:54:29

标签: java arraylist constructor subclass superclass

我目前正在尝试学习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? 我想将其初始化为超类,在子类中添加元素,然后在其他类中使用它。

1 个答案:

答案 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