我想将类Car
的对象更改为类FastCar
的对象。很容易看出main方法在这种情况下返回错误。我写它是为了更容易表达我的问题:如何围绕超类的对象构建子类的对象?考虑到类可能不小的最佳方法是什么?以下示例? 该解决方案也适用于具有大量字段的大型课程。
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;
}
更新
正如@Arthur所说:
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);
}
@Arthur建议的FastCar
构造函数不好,因为标签没有保留。
输出为Car
,但我预计它为new Label
。
我想要一些技巧将我的“汽车”转换成“快车”,而不会丢失数据。此技巧对于较大的类也应该是有效的。
答案 0 :(得分:3)
有几种方法可以进行向下转换:
FastCar(Car car)
课程中添加构造函数FastCar
。public FastCar asFastCar()
课程中介绍方法Car
。public static FastCar castToFastCar(Car car)
。答案 1 :(得分:1)
当你写下这一行时:
car = fast;
java自动执行上层转换,因此您不必手动完成。
也许你想要做的是这样的事情:
Car car = new Car();
FastCar fastCar = new FastCar();
FastCar fastCar2 = new Car();//you cant do this since Car is the Superclass of Fast car
Car car2 = new FastCar();//this is right
现在要使用car2对象访问FastCar类的方法,你必须像这样:
FastCar fastCar3 = (FastCar)car2;//now you can access the moethods of FastCar class with the car2 object.
通常,您不能使超类的对象被前一个案例中的子类的对象引用。
答案 2 :(得分:1)
我不能完全确定最佳方法,但是你能做到的一种方法是将Car对象作为FastCar类的参数,然后从那里添加所有变量。或者接受Car类在Fast Car构造函数中设置的变量。
// FastCar class
FastCar(Car car){
super(car.name);
}
FastCar(String name){
super(name);
}