使用扩展方法时返回扩展类参数而不是其自身参数的类



如果标题有点混乱,请原谅!我得到了这个名为Flower的类,它扩展了一个Plant类(用于学校作业),我在Plant中有一个getType()方法,它只返回this.type。我的问题是,当我在Flower对象上运行此方法时,而不是返回Flower的类型,它只是返回null(这是Plant类中的默认返回值)。我想知道是否有办法在不重写方法的情况下修复这个,因为那会破坏整个赋值的意义。我的代码如下:

植物类:

public class Plant {

protected List<String> plot = new ArrayList<>();
private String type;

public Plant() {
//Some stuff here
this.type = null;
}

public String getType() {
return this.type;
}
//More stuff for the class here

花类:

public class Flower extends Plant {
private String type;
private int size;
public Flower(String type) {
this.plot = new ArrayList<>();
this.type = type;
this.size = 0;
//More code not important for the question goes here...

提前感谢您的帮助!

您需要从Flower类中删除private String type;

发生的事情是你的子类(Flower)声明了一个字符串'type',它隐藏了Plant的'type'字段。

可以这样想——子节点可以看到父节点的字段,但是父节点不能看到子节点的字段。

所以,当你在Flower中设置type时,它不适用于Plant-如果你没有在Flower中声明type,当你在Flower中设置它时,它将对Plant可见,因为这就是它声明的地方。

你面临的问题是,你的Plant类和你的Flower类都有自己的type。因为你没有在Flower类中覆盖getType()方法,返回值将始终是Planttype,即null

你有一些选择来解决这个问题。你可以做和plot一样的事情,在Flower的构造函数中创建protected字段并将其赋值。

public class Plant {
protected List<String> plot;
protected String type;
public Plant() {
this.plot = new ArrayList<>();
}
public String getType() {
return this.type;
}
}
public class Flower extends Plant {
private int size;
public Flower(String type) {
this.type = type;
this.size = 0;
}
}

或者因为每个Plant都有一个type,你可以使用"cleaner"版本,你用超级让Plant处理作业。

public class Plant {
protected String type;
protected List<String> plot;
public Plant(String type) {
this.type = type;
this.plot = new ArrayList<>();
}
public String getType() {
return this.type;
}
}
public class Flower extends Plant {
private int size;
public Flower(String type) {
super(type);
this.size = 0;
}
}

相关内容

  • 没有找到相关文章

最新更新