1行目ではButtonインスタンスは作成されていません。
Button型の配列をサイズ10でメモリに確保しているだけです。
その後、ループの中で配列一つ一つに対してButtonインスタンスを作成しています。
最初のは、Buttonという型を持つ配列に対するnewで、
次に、Button自体のnewをしています。
同じButtonというキーワードに対してnewしているように見えますが、ここが違います。
ちなみに、この違いをもう少し分かり易くするため、配列を定義する際には
Button bt[] = new Button[10];
↑ではなくて、
Button[] bts = new Button[10];
と書くほうがよいと思いますよ。
どちらもJavaの文法的には正しいのですが。
コンパイルする時に、型を特定できないと、
コンパイルエラーとなり、先に進めなくなります
言葉を変えると、
プログラマはthisがボタンであると知っているが、
コンパイラはそんなの知らないよという事です
そのため、まず入れ物としてbtを記述し、
Button bt[] = new Button[10];
thisも同じくButtonですよという形で記述します
bt[i] = new Button(this);
▽3
●
a-kuma3 ●33ポイント ベストアンサー |
Java は、プリミティブな型を除いて、参照しかありません。
配列ですら動的に確保する必要があります。
C や C++ で言うと、ある構造体(もしくは、クラス)の配列というのは存在せず、
その参照(ポインタ)の配列しかありません。
同じことを、C で書くと
struct Button ... struct Button **bt = malloc(sizeof(struct Button*) * 10); for (int i = 0 ; i < 10 ; i++) { *(bt + i) = malloc(sizeof(struct Buttn)); ... }
C++ で書くと、
class Button ... Button **bt = new Button[10]; for (int i = 0 : i < 10 ; i++) { *(bt + i) = new Button(...); ... }
という感じになります。