クラスCar
のオブジェクトをクラスFastCar
のオブジェクトに変更したいとします。この場合、メインメソッドがエラーを返すことは容易にわかります。私はそれを書いて簡単に私の質問を表現する:スーパークラスのオブジェクトの周りにサブクラスのオブジェクトを構築する方法はありますか?以下の例のようにクラスが小さくないと考えている最善の方法はありますか? 解決策は、多くのフィールドを持つ大きなクラスでも機能するはずです。オブジェクトクラスをJavaのサブクラスに変更する
public class Car {
String name;
String label;
Car(String name){
this.name = name;
label = "Car";
}
Car(){
this("dafaultCarName");
}
}
public class FastCar extends Car{
String howFast;
FastCar(){
howFast = "veryFast";
}
FastCar(String name){
super(name);
howFast = "veryFast";
}
}
public static void main(String[] args) {
FastCar fast;
Car car = new Car("FastCarName");
fast = (FastCar) car;
}
UPDATE
@Arthurが言ったように:ラベルが保存されていないため@Arthurによって提案FastCar
から
public class Car {
String name;
String label;
Car(String name){
this.name = name;
label = "Car";
}
Car(){
this("dafaultCarName");
}
}
public class FastCar extends Car{
String howFast;
FastCar(){
howFast = "veryFast";
}
FastCar(String name){
super(name);
howFast = "veryFast";
}
FastCar(Car car){
super(car.name);
}
}
public static void main(String[] args) {
FastCar fast;
Car car = new Car("FastCarName");
car.label = "new Label";
fast = new FastCar(car);
System.out.println(fast.label);
}
コンストラクタは良いものではありません。
出力はCar
ですが、私はそれがnew Label
であると予想しました。 データを失うことなく、自分の「車」を「速い車」に変換するトリックが欲しいです。また、このトリックも大規模なクラスでは効率的です。
これらの方法は大きなクラスにも適していますか? – webpersistence
また、私はダウンキャストだと思います。 – webpersistence
はい、ダウンキャストです –