申し訳ありませんが、その質問の見出しを作成する方法が本当にわかりません。たぶん、私がやろうとしていることの名前がわからないかもしれませんが、いくつかのコードで説明できます:
残念ながら、copy-constructor も public static copy メソッドも持たないクラスがあるとします。
class A
{
private int i; // <- private, cant access
String x; // <- even worse: cant access unless in same pkg!
/* … other stuff, ctor, etc. … */
public A clone()
{
A a = new A();
a.i = i;
a.x = x;
return x;
}
}
さらに推測すると、そのクラスのオブジェクトを返す関数がいくつかあります。
public static A someFn(x,y,z);
問題は、そのクラスから派生していくつかの機能を追加したいということです。残念ながら、Java には sizeof も、cc または静的コピー メソッドもありません。
だから私がするとき
class B extends A
{
protected w;
public B clone()
{
/* as usual */
}
}
次に、B のクローンを作成して新しい B を取得できますが、返された A を someFn() から B に変換するにはどうすればよいですか。Java でスライスの反対を行う方法はありますか? クローンを作成しても、それはまだ A であり、フィールドごとにコピーすることはできません。これは C++ ではすべて簡単ですが、Java ではどのように行うのでしょうか?