避免在兄弟类中重复代码

时间:2019-01-27 11:09:01

标签: java

初学者的问题-如何避免在同一个类中重复代码,而同一个类在同一个字段中有各自不同的版本? 参见下面的示例:我可以以某种方式将getName()方法(以及更复杂的方法)移动到父类吗?

public abstract class Car {
    public abstract String getName();
}

public class PassengerCar extends Car {
   private String name = "Passenger Car";

   @Override
   public String getName() { return name; }
}

public class CoalCar extends Car {
   private String name = "Coal Car";

   @Override
   public String getName() { return name; }
}

2 个答案:

答案 0 :(得分:4)

例如,您可以:在具有名称的父类中创建一个构造函数,并在子类的构造函数中指定该名称:

abstract class Car {

    private String name;

    public Car(String name) {
        this.name = name;
    }

    public String getName() { return name; }

}

class PassengerCar extends Car {

    public PassengerCar() {
        super("Passenger Car");
    }

}

class CoalCar extends Car {

    public CoalCar() {
        super("Coal Car");
    }

}

然后可以这样使用:

Car passenger = new PassengerCar();
System.out.println(passenger.getName());

打印输出:

Passenger Car

答案 1 :(得分:0)

@Mark的答案是解决方案,但让我为其添加一些背景。

简单的经验法则:如果您希望所有子类都具有某些共同点,请将其放入父类中。

你有什么?

  • 所有子类都使用一个名为name的字段(值不重要,请参见下文),
  • 所有子类都使用的名为getName()的吸气剂,
  • 所有"Passenger Car"实例的初始值PassengerCar
  • 所有"Coal Car"实例的初始值CoalCar

因此,name字段和getName()方法进入Car,并且该字段的不同初始值进入PassengerCar和{{1 }}。