こちらのコードをご覧ください。
class Vehicle {
public void printSound() {
System.out.print("vehicle");
}
}
class Car extends Vehicle {
public void printSound() {
System.out.print("car");
}
}
class Bike extends Vehicle{ // also tried to extend Car
public void printSound() {
System.out.print("bike");
}
}
public class Test {
public static void main(String[] args) {
Vehicle v = new Car();
Bike b = (Bike)v;
v.printSound();
b.printSound();
Object myObj = new String[]{"one", "two", "three"};
for (String s : (String[])myObj) System.out.print(s + ".");
}
}
このコードを実行するClassCastException
と、 inheritance.Car cannot be cast to inheritance.Bike
.
次に、行を見てくださいObject myObj = new String[]{"one", "two", "three"};
。Vehicle v = new Car();
この行は右と同じですか?両方の行で、サブクラス オブジェクトをスーパー クラス参照変数に割り当てています。ただし、ダウンキャストString[]myObj
は許可されていますが、許可されてい(Bike)v
ません。コメントで述べたように、自転車を使用して車を拡張しようとしました。ここでのいくつかの議論によると、自転車は乗り物を拡張しているため、車ではありません。Car を Bike で拡張すると、Bike が Car の一種であることを意味しますが、それでも例外は残ります。
この辺りで何が起こっているのかを理解するのを手伝ってください。
Ps - 車から自転車へ、自転車から車への変換をそのまま受け取らないでください ;)