【发布时间】:2020-04-11 22:01:21
【问题描述】:
我对超类和子类背后的定义和逻辑感到困惑。
【问题讨论】:
标签: java inheritance subclass superclass
我对超类和子类背后的定义和逻辑感到困惑。
【问题讨论】:
标签: java inheritance subclass superclass
总之——是的。由于子类实例“isA”超类,你可以将它分配给这样的变量。
考虑以下示例 - String 是 Object,因此此分配是合法的:
Object obj = "abcd"; // this is a string literal
【讨论】:
为了快速回答您的问题:是的,几乎可以在超类所在的任何位置分配子类。
这样做的原因涉及继承和面向对象的编程。让我给你举个例子。让我们想想作为火车一部分的火车和有轨电车。
超类是RailwayCar。每个铁路车厢都有重量。
public class RailwayCar {
private int weight;
public RailwayCar() {
}
public RailwayCar(int weight) {
setWeight(weight);
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public void arriveAtStation(Station station) {}
public void leaveStation(Station station) {}
}
这只是一辆基本的汽车。但是,有特殊的汽车。
// Engines have power in addition to weight
public class Engine extends RailwayCar {
private int power;
public Engine(int weight, int power) {
super(weight);
setPower(power);
}
public void setPower(int power) {
this.power = power;
}
public int getPower() {
return power;
}
}
还有其他类型的汽车。例如,可能有一个乘客车,其中随着乘客上下车,每个车站的重量可能会发生变化。对于特定类型的货物,有特定类型的汽车。 LogCar 将包含长日志。
RailwayCar 的所有这些子类都可以覆盖车站方法(arriveAtStation() 和 leaveStation()),以通过覆盖这些方法来执行特定操作。
所有这些汽车都可以放入同一个列表或数组中。例如,RailwayCar[] 车,或 List cars = new ArrayList();
【讨论】: