teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

ネストされたクラス

2019/07/18 14:05

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -1,7 +1,18 @@
1
1
  > newでAlertDialogのインスタンスを作成しているのだと考えたのですがAlertDialog.classを見てみると1つのファイルの中にクラスが複数あったのでまず、その部分が理解できません。
2
2
 
3
+ AlertDialogとBuilderがあったということですが、シンプルに書くとこういう構造になっているはずです。
4
+ ```java
3
- この部分については後ほど編集します。
5
+ public class AlertDialog {
6
+ public static class Builder {
7
+ }
8
+ }
9
+ ```
10
+ このクラスの中にstaticで入っているクラスは**ネストされたクラス**といい、外側に書かれたクラスのインスタンスとは無関係にインスタンスの生成ができます。(cf:クラスの中でstaticがついていないクラスは**内部クラス**と呼び、外側のクラスのインスタンスと結びついた状態でないとインスタンスの生成ができない。)
4
11
 
12
+ 実は最初のnewはAlertDialogのインスタンスを生成しているのではなく、**このネストされたクラスであるBuilderのインスタンス**を生成しているのです。
13
+ 例えばAというクラスにaというstaticフィールドがあったとすると、このaにアクセスするために`A.a`という書き方をしますよね?Aというクラスにmethodというstaticメソッドがあれば、それを使うためには`A.method()`のように書きますよね?
14
+ これとまったく同じ要領で、staticなクラスBuilderにアクセスして、それをnewしているのです。
15
+
5
16
  > この部分でのthisの意味がわかりません。インスタンスがもつ変数を利用するときにthisを使うということは理解できましたが、この部分でthisはどのような意味でつかわれているのでしょうか。
6
17
 
7
18
  ほとんどの場合、このような記述はActivityを継承したクラスのメソッド内で記述されていると思います。この例においてもそうであるという仮定で話をすると、`this`はその「Activityを継承したクラス」のインスタンスを指します。