你理解错了。它继承了 Vehicle 类的所有内容。包保护的元素不能从子类访问,仅此而已。所以你不能访问这些字段和方法,你也不能覆盖它们。但这并不意味着您需要重新声明它们。
让我们举个例子。假设您设计了一个 Vehicle 类,并允许子类覆盖并访问车辆的颜色。但是假设您不希望子类与车辆的引擎发生冲突。因此,您将拥有以下内容:
public class Vehicle {
private Engine engine;
protected Color color = Color.BLACK;
public Vehicle() {
this.engine = new Engine();
}
public final void start() {
System.out.println("starting engine...");
engine.start();
System.out.println("engine started");
}
public final Color getColor() {
return this.color;
}
}
public class Car extends Vehicle {
public Car(Color color) {
super();
this.color = color;
}
}
汽车是交通工具。所以既然你可以启动一辆车,你也可以启动一辆车。由于汽车有发动机,汽车也有发动机。不可能从 Car 类内部修改引擎或对引擎做任何事情,因为它是 Vehicle 类的私有的,但汽车有一个。
color
但是,该字段受到保护。这意味着 Car 类可以访问该字段。例如,它在构造函数中对其进行了修改,以便能够具有除黑色之外的另一种颜色。
试试下面的代码:
Car car = new Car();
car.start();
你会看到引擎启动了。