没有一个参数的子类构造函数 - 是否可能?怎么做?

时间:2017-11-30 23:31:05

标签: java oop subclass superclass

让我们先从代码开始

这是我的超类

public class Burger {

protected String name;
protected MeatType meat;
protected BreadType bread;
private double basePrice;
private EnumMap<Addition, Integer> additions;

public Burger(String name, MeatType meat, BreadType bread){
    this.name = name;
    this.meat = meat;
    this.bread = bread;
    this.basePrice = 3.00;
    this.additions = new EnumMap<Addition, Integer>(Addition.class);
}

这是继承自它的子类

public class FitBurger extends Burger {

public FitBurger(String name, MeatType meat, BreadType bread){
    super(name,meat,bread);
    }

}

但是,我不希望我的子类有一个带有BreadType面包的构造函数,但我仍然希望它继承变量并将其设置为特定值。我希望超类保持原样。

是否有可能以任何可能的方式实现这一目标?

4 个答案:

答案 0 :(得分:0)

  

但我仍然希望它继承变量并将其设置为特定值。我希望超类保持原样。是否有可能以任何可能的方式实现这一目标?

是。您可以将常量传递给super()来电。像,

public FitBurger(String name, MeatType meat){
    super(name,meat,RYE_BREAD_CONSTANT);
}

答案 1 :(得分:0)

您需要从FitBurger构造函数中删除BreadType,但在超级调用中传入一个值。

public class FitBurger extends Burger {

    public FitBurger(String name, MeatType meat){
        super(name,meat,BreadType.Bun);
    }

}

答案 2 :(得分:0)

public FitBurger(String name, MeatType meat){
    super(name,meat,null);
}

将此新构造函数添加到FitBurger类或替换现有构造函数。

答案 3 :(得分:0)

从子类构造函数中省略BreadType bread参数,并使用super(name,meat, null)或任何您想要使用的默认BreadType