Java - 具有预定义继承值的构造函数

标签 java inheritance constructor

为了让我的问题更清楚,我简化了名称和值,因为我的代码很长并且有很多变量和方法。 这个问题与我的问题完全一样:

我正在尝试创建一个具有两个构造函数的类 B,并继承另一个名为 A 的类。

这是 A 的简化 View :

public class A {

    int value1;
    List<SpecialItem> itemList;

    public SampleClass(int value1, List<SpecialItem> itemList) {
        this.value1 = value1;
        this.itemList = itemList;
    }

现在,这是 B 的简化 View :

public class B {

    public SampleClass(int value1, List<SpecialItem> itemList) {
        super(value1,itemList);
    }

    public SampleClass(int value1) {
        ???
    }

现在,问题是我想为 B 创建第二个构造函数(其中 ??? 所在的位置),它不接收预定义的 itemList,而是创建自己的列表。 (对象SpecialItem是项目同一包中的另一个类)。

当然,我在定义该构造函数时遇到问题,因为它不适用于 A 的构造函数。

我的目标是:

  1. 不要给启动 A 实例的机会 给定的项目列表。
  2. 有一个 B 的构造函数,它不提供 itemList,而是创建我想要的 itemList 并将其“种植”在 B 中。例如,该列表将只有一个由以下方法创建的 SpecialItem 类型的对象我给它的参数。

我的一件事是为 A 创建一个不带 itemList 的私有(private)/包可见性构造函数,然后将其用作“ super ”,但我不确定这是否是最佳解决方案。

希望得到您的想法和反馈,

谢谢。

最佳答案

您似乎需要将默认列表传递给父类(super class)的构造函数。我会这样做:

public class B {

    private static final List<SpecialItem> DEFAULT_ITEM_LIST = 
        new ArrayList<>(Arrays.asList(new SpecialItem()));

    public SampleClass(int value1, List<SpecialItem> itemList) {
        super(value1, itemList);
    }

    public SampleClass(int value1) {
        this(value1, DEFAULT_ITEM_LIST);
    }
}

B的第二个构造函数委托(delegate)给第一个,后者又调用父类(super class) A 的构造函数。都是 B 的第一个构造函数和 A 的构造函数需要 List<SpecialItem>作为它的第二个参数。为此,我们使用 DEFAULT_ITEM_LIST ,它被定义为 private static final B 中的成员.

请注意,我使用了 new ArrayList<>(Arrays.asList(...))而不仅仅是Arrays.asList(...) 。这是因为 Arrays.asList 返回的列表不能在结构上进行修改(元素不能添加到其中或从中删除,尽管它们可以被其他元素替换)。 ArrayList的构造函数接收另一个 List允许创建一个通用的、可变的 List从另一个列表中。

关于Java - 具有预定义继承值的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44445508/

相关文章:

java : remove words from ArrayList<String>

java - Bitmap.createScaledBitmap 的更多内存优化版本?

java - 构造函数调用可覆盖方法(延迟调用)

c++ - 涉及类和结构的构造函数/析构函数

java - 服务中的 Android 位置管理器

java - AspectJ - 指定方法的切入点,其参数用类级别注释进行注释

python - 如何使变量专属于类?

inheritance - Typescript - 为什么字符串类型可以被字符串文字覆盖

Python3 : inheriting from list breaks automagically provided __ne__ when __eq__ is defined?

c++ - C++错误:没有匹配的构造函数用于初始化