0

可能重复:
内部类的使用

我一直在寻找将使用内部类的主要原因,我到处都得到了最常见的答案Due to re-usability of the existing code...... 但是,我们也可以通过在类之外定义一个类来实现这一点。不是吗?

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

您定义这个内部类(非静态)的方式允许访问外部类的成员。这通常意味着在外部类中相当私人的使用

使用内部类的另一个原因是要明确该类旨在由外部类使用并与外部类一起使用。

任何其他人都可以访问静态内部类。

于 2012-10-28T14:22:56.433 回答
1

内部类应该用于将逻辑相关的类组合在一起。当然,没有人强迫您将某些类设为内部类——您可以很好地在单独的文件中定义它们(除非您想将它们设为私有,这当然是可能的)。一个例子LinkedListjava.util. 有一个名为的内部类Entry用作列表的节点 - 并且只会在LinkedList类内部使用,因此它被定义为内部类。

于 2012-10-28T14:25:49.550 回答
0

我同意所有其他答案,但我只想添加一个注释。如果您有问题,我更喜欢匿名类(我想您只实例化 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 回答