私はJavaのクラスとコンストラクターについて学んでいます。サンプルプログラムのコードをいじってみましたが、何が起こっているのか正確に理解できないようです。
このコードはコンパイルされません。これは私にとって理にかなっています。
class Line {
Point start;
Point end;
Line(final Point start, final Point end) {
this.start = new Point(start);
this.end = new Point(end);
start = new Point(0.4, 0.4);
}...
Pointオブジェクトのコンストラクターを呼び出して、元の開始Pointオブジェクト参照を別のPointオブジェクトに割り当てようとしています。最後のキーワードはこれと矛盾しています。
ただし、Pointstartパラメーターからfinalキーワードを削除すると...
class Line {
Point start;
Point end;
Line(Point start, final Point end) {
this.start = new Point(start);
this.end = new Point(end);
start = new Point(0.4, 0.4);
}
実際には参照を変更していないようです。Lineコンストラクターに渡されたPointオブジェクトは、元のオブジェクトを指しているように見え、Lineコンストラクターのコードによって変更されません。では、何が得られるのでしょうか?これは、参照される「開始」がLineコンストラクターのスコープ内でローカルであるという事実と関係がありますか?