0

重複の可能性:
内部クラスの使用

内部クラスが使用される主な理由を探していましたが、どこでも最も一般的な答えが得られましDue to re-usability of the existing codeた.. しかし、これは、クラスの外でも 1 つのクラスを定義することで実現できます。ですよね??

class MyOuterClass {
    private class MyOnClickListener implements OnClickListener {
        @Override
        public void onClick(View view) {
            mTts.speak(words.getText().toString(), TextToSpeech.QUEUE_ADD, null);
        }
    }

    // later (inside some method)...
        speakBtn.setOnClickListener(new MyOnClickListener());
}

これMyOnClickListenerが内部クラスで、後で通常のクラスと同じ方法でオブジェクトを作成しますnew MyOnClickListener()。それで、主な違いは何ですか、それが理由で導入されました。

4

3 に答える 3

1

この内部クラス (非静的) を定義した方法により、外部クラスのメンバーにアクセスできます。これは、一般に、外部クラス内でのかなりプライベートな使用を意味します

内部クラスを使用するもう 1 つの理由は、クラスが外部クラスによって使用されることを意図していることを明確にすることです。

静的内部クラスは、他のクラスからアクセスできます。

于 2012-10-28T14:22:56.433 に答える
1

内部クラスは、論理的に関連するクラスをグループ化するために使用する必要があります。もちろん、特定のクラスを内部クラスにすることを強制する人はいません。別のファイルでそれらを非常にうまく定義できます (それらを非公開にしたい場合を除きます。これは確かに可能性があります)。例は のLinkedListクラスですjava.utilEntryリストのノードとして機能する内部クラスが呼び出され、クラス内でのみ使用LinkedListされるため、内部クラスとして定義されます。

于 2012-10-28T14:25:49.550 に答える
0

他のすべての回答に同意しますが、1 つだけメモを追加したいと思います。あなたの質問の場合、私は匿名クラスを好みます( MyOnClickListener クラスを一度だけインスタンス化すると思います)。見た目はよりクリーンで簡潔です。

speakBtn.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View view) {
      mTts.speak(words.getText().toString(), TextToSpeech.QUEUE_ADD, null);
  }
});
于 2012-10-28T14:38:09.110 に答える