从Java中的子类构造函数调用超类

use*_*732 12 java subclass accessor superclass

我试图创建一个构造函数,将一个字段作为参数,然后将其放在一个存储在超类中的字段中.这是我正在使用的代码

public crisps(String flavour, int quantity) {
    this.flavour = super.getFlavour();
    this.quantity = quantity;
}
Run Code Online (Sandbox Code Playgroud)

在超类中,我用字段初始化了字段

private String flavour;
Run Code Online (Sandbox Code Playgroud)

我有一个访问方法

public String getFlavour() {
    return flavour;
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误" 风味在超类中有私人访问权限 ",但我相信这应该无关紧要,因为我调用了将其返回到字段的访问器方法?

lpi*_*.eu 21

你应该做什么:

在超类中添加构造函数:

public Superclass {
    public SuperClass(String flavour) {
       // super class constructor
       this.flavour = flavour;
    }
}
Run Code Online (Sandbox Code Playgroud)

在Crisps类中:

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

 

评论

您对问题的一些评论:

"在超级课程中,我已经初始化了该领域"

private String flavour;
Run Code Online (Sandbox Code Playgroud)

这不是初始化,而是声明.初始化是指设置值时.

"我收到一个错误"味道在超类中有私人访问"但我相信这应该无关紧要,因为我正在调用将其返回到字段的访问器方法?"

当你调用一个访问器(也就是getter)时,它没问题 - 取决于getter的可见性.代码中的问题是:

this.flavour = 
Run Code Online (Sandbox Code Playgroud)

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

public void setFlavour(String flavour) {
    this.flavour = flavour;
}
Run Code Online (Sandbox Code Playgroud)

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

public Crisps(String flavour, int quantity) {
    this.quantity = quantity;
    super.setFlavour(flavour);
}
Run Code Online (Sandbox Code Playgroud)