在抽象类中构建颜色和位置对象的最佳方法是什么?为什么?
public abstract class Vehicle {
private int vehicleId;
private Color color; // color Object
private Location location; // location Object
public Vehicle() {
color = new Color();
location = new Location();
}
}
public class Car extends Vehicle {
private String type;
public Car() {
super();
}
}
public abstract class Vehicle {
private int vehicleId;
protected Color color; // color Object
protected Location location; // location Object
public Vehicle(){}
}
public class Car extends Vehicle {
private String type;
public Car(){
super();
super.location = new Location();
super.color = new Color();
}
}
答案 0 :(得分:1)
这两个方法之间的区别是,第一个方法实例化了其在抽象类中的状态。因此,每个继承者都将继承该状态(尽管由于其状态private
而不是protected
而无法访问它)。
在第二种方法中,对象的状态在继承者的构造函数中被初始化,并且可能被迫声明了color
和{{1} }设为location
,因为您将无法访问该状态。
哪种方法更好?这取决于...如果您希望每个孩子都继承一个共同的状态,那就是第一个。如果要每个孩子定义自己的状态,则第二个。