初学者的问题-如何避免在同一个类中重复代码,而同一个类在同一个字段中有各自不同的版本? 参见下面的示例:我可以以某种方式将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; }
}
答案 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 }}。