假设我有这些课程:
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 ();
以上所有内容都明显被打破,实现这一目标的正确方法是什么?
答案 0 :(得分:2)
这样做的一种方法是添加一个B的构造函数,它接受A,并从中收集相关的部分:
public B(A a) {
this.x = a.x;
this.y = a.y;
}
你的B班最适合知道该怎么做,所以这种方法也相当干净。它可以让你写
B b = new B(read_an_A());
像你在问题中建议的那样。当然B也很可能需要其他构造函数。
答案 1 :(得分:0)
如果您不知道A重新调整是否为B - 您需要确认或者您将获得运行时异常
var a = read_an_A();
if (a is B)
{
var b = (B)a;
....
}