java - 在Java中从子类构造函数调用父类(super class)

标签 java subclass superclass accessor

我正在尝试创建一个构造函数,该构造函数将一个字段作为参数,然后将其放入存储在父类(super class)中的字段中。这是我正在使用的代码

public crisps(String flavour, int quantity) {
    this.flavour = super.getFlavour();
    this.quantity = quantity;
}

在父类(super class)中,我用

初始化了该字段
private String flavour;

我有一个访问器方法

public String getFlavour() {
    return flavour;
}

我收到错误“ flavor 在父类(super class)中具有私有(private)访问权限”,但我相信这应该不重要,因为我正在调用将其返回到字段的访问器方法?

最佳答案

你应该做什么:

向您的父类(super class)添加构造函数:

public Superclass {
    public SuperClass(String flavour) {
       // super class constructor
       this.flavour = flavour;
    }
}

在 Crisps 类中:

public Crisps(String flavour, int quantity) {
    super(flavour); // send flavour to the super class constructor
    this.quantity = quantity;
}

 

评论

对您的问题的一些评论:

“在父类(super class)中,我已使用“初始化该字段”

private String flavour;

这不是初始化,而是声明。初始化是指您设置一个值。

“我收到错误“ flavor 在父类(super class)中具有私有(private)访问权限”,但我相信这应该不重要,因为我正在调用将其返回到字段的访问器方法?”

当您调用访问器(又名 getter)时,这是可以的 - 取决于 getter 可见性。 您代码中的问题是:

this.flavour = 

因为flavor不是在Crisps类上声明的字段,而是在supper类上声明的字段,所以你不能像这样直接访问。你应该使用我的建议或在父类(super class)上声明一个setter:

public void setFlavour(String flavour) {
    this.flavour = flavour;
}

然后你可以在子类上使用它:

public Crisps(String flavour, int quantity) {
    this.quantity = quantity;
    super.setFlavour(flavour);
}

关于java - 在Java中从子类构造函数调用父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60227776/

相关文章:

java - 使用 SAX 解析具有未知数量递归的 XML 结构

java - PaintComponent() 方法未通过 mouseMoved() 调用

java - Java中hashmap排序的ArrayList

java - 对java像素操作真的很困惑

python - 重新定义现有函数

ios - 将数组和字符串传递给自定义 UIView 类(子类)(iOS)

java - 如果子类中的实例方法具有相同的签名和不同的返回类型,它是覆盖方法还是新方法?

java - 对非构造函数方法强制执行 super 调用

c++ - 问题覆盖绘制曲线的 c++ 类

java - Java中如何从父类(super class)调用子类方法?