为什么我们选择内部阶级或者使用内部阶级的主要优势是什么?

时间:2012-10-28 14:20:03

标签: java oop

  

可能重复:
  Usage of inner class

我一直在寻找使用内部课程的主要原因,我到处都有最常见的答案.. 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()相同。那么,主要的区别是什么,因为它已被引入。

3 个答案:

答案 0 :(得分:1)

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

使用内部类的另一个原因是要明确该类是由外部类使用的。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我同意所有其他答案,但我只想添加一个注释。如果你的问题,我更喜欢匿名类(我想你只需要实例化一次MyOnClickListener类),它看起来更干净,更简洁:

speakBtn.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View view) {
      mTts.speak(words.getText().toString(), TextToSpeech.QUEUE_ADD, null);
  }
});