2

假设我有这些课程:

Class A {};
Class B : A {} ;

和一个返回的函数A

 public A read_an_A();

由于B是 的孩子A,我希望能够A从以下意义上读取它的属性:

B b = new B ( read_an_A() );

(假设使用默认的复制构造函数)

或者可能是这样的:

B b = (B) read_an_A ();

以上所有显然都被打破了,实现这一目标的正确方法是什么?

4

2 回答 2

2

一种方法是添加 B 的构造函数,该构造函数接受 A,并从中获取相关部分:

public B(A a) {
    this.x = a.x;
    this.y = a.y;
}

您的 B 级最有能力知道该采取什么措施,因此这种方法也相当干净。它让你写

B b = new B(read_an_A());

就像您在问题中建议的那样。当然 B 也很可能需要其他构造函数。

于 2013-10-06T14:57:23.953 回答
0

如果您不知道重新调整的 A 是否为 B - 您需要确保,否则您将获得运行时异常

var a = read_an_A();
if (a is B) 
{
    var b = (B)a;
    ....
}
于 2013-10-06T14:57:45.503 回答