在抽象类内部创建对象的最佳方法是什么?

时间:2020-04-01 20:40:13

标签: java oop

在抽象类中构建颜色和位置对象的最佳方法是什么?为什么

方法1

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();    
    }
}

方法2

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();    
    }
}

1 个答案:

答案 0 :(得分:1)

这两个方法之间的区别是,第一个方法实例化了其在抽象类中的状态。因此,每个继承者都将继承该状态(尽管由于其状态private而不是protected而无法访问它)。

在第二种方法中,对象的状态在继承者的构造函数中被初始化,并且可能被迫声明了color和{{1} }设为location,因为您将无法访问该状态。

哪种方法更好?这取决于...如果您希望每个孩子都继承一个共同的状态,那就是第一个。如果要每个孩子定义自己的状态,则第二个。