Java 我们为什么选择内部阶级还是什么';使用内部类的主要优点是什么
可能重复:Java 我们为什么选择内部阶级还是什么';使用内部类的主要优点是什么,java,oop,Java,Oop,可能重复: 我在寻找将使用内部类的主要原因,我在所有地方都得到了最常见的答案由于现有代码的可重用性。但是,我们也可以通过在类之外定义一个类来实现这一点。不是吗 class MyOuterClass { private class MyOnClickListener implements OnClickListener { @Override public void onClick(View view) { mTts.speak(w
我在寻找将使用内部类的主要原因,我在所有地方都得到了最常见的答案
由于现有代码的可重用性
。但是,我们也可以通过在类之外定义一个类来实现这一点。不是吗
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
是内部类,稍后创建对象的方式与我们为普通类新建MyOnClickListener()
所做的方式相同。那么,主要的区别是什么,原因是,它已经被引入 您定义该内部类(非静态)的方式允许访问外部类的成员。这通常意味着在外部类中有一个相当私人的用途
使用内部类的另一个原因是为了明确该类将由外部类使用,并与外部类一起使用
静态内部类可以由任何其他类访问。内部类应用于将逻辑上相关的类分组在一起。当然,没有人强迫您将某些类设置为内部类——您可以在单独的文件中很好地定义它们(除非您想将它们设置为私有,这当然是可能的)。例如
java.util
中的类。有一个名为Entry
的内部类,它用作列表的节点,并且只在LinkedList
类中使用,因此它被定义为一个内部类。我同意所有其他答案,但我只想添加一个注释。对于您的问题,我更喜欢匿名类(我想您只实例化了一次MyOnClickListener类),它看起来更简洁明了:
speakBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
mTts.speak(words.getText().toString(), TextToSpeech.QUEUE_ADD, null);
}
});
@谢谢。。!!我明白了……)某些功能最好表示为对象,但仅在另一个对象的上下文中才有意义,
不一定需要对外公开
如果在您的示例中使用的是内部
类,那么内部
类是什么意思?你是说匿名的内部阶级吗?无论如何,没有nstatic内部类具有外部类类型的隐藏成员,并且可以使用其成员。外部类或静态类不是。。它类似于在类外部定义的私有类。但是,在这种情况下,任何类都无法访问它。所以,引入了内部类。不是吗。。??