可能重复:
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()
相同。那么,主要的区别是什么,因为它已被引入。
答案 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);
}
});