0

最好在Java中,有没有一种从超类实例实例化子类的好方法?

假设我有 ClassB,它是 ClassA 的子类,这是 ClassA 的构造函数:

 public ClassA(){


  }

我想做类似的事情:

public class ClassB extends ClassA{

     public ClassB(ClassA aClassA){

       super(aClassA);

    }
}

有什么方法可以轻松地从超类的实例中获取子类的实例,尤其是当子类可能只比超类多一个字段时,因此它们之间没有太大区别?

例如,

ClassA a = new ClassA();

B类b = a;

(编译器会希望我这样做: ClassB b = (ClassB)a;......这是行不通的。)

我该怎么做呢?

4

2 回答 2

2

无法将Instance of 强制ClassA转换为子类ClassB

可以这样想:

class A{

   int a;
}

class B extends A{
   long b;
}


A a = new A(); //creating instance of super class. This instance will not have `b`

boolean result = a instanceof B; //the result will be false but if you cast ignoring that

B b = (B)a; //Will throw a CLASS CAST EXCEPTION at runtime

你可以这样做:

A b = new B();

B bb = (B)b;

的所有实例B都是Atoo 的实例,但逆向是不可能的。您可以使用instanceof.

于 2013-07-31T05:08:33.430 回答
2

有什么方法可以轻松地从超类的实例中获取子类的实例

不,超类实例不包含子类实例。您要做的是将超类类型引用变量引用的对象转换为子类的对象。

ClassB b = (ClassB)a;

这是危险的,因为如果在运行时a实际上没有引用 的实例,它可能会失败。ClassB

请记住,所有实例ClassB都是 instanceof ClassA,但反之则不然。

我不确定你想要实现什么,可能是看看抽象工厂模式工厂方法模式,看看它是否有帮助。

于 2013-07-31T04:56:52.593 回答