Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们为什么选择内部阶级还是什么';使用内部类的主要优点是什么_Java_Oop - Fatal编程技术网

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内部类具有外部类类型的隐藏成员,并且可以使用其成员。外部类或静态类不是。。它类似于在类外部定义的私有类。但是,在这种情况下,任何类都无法访问它。所以,引入了内部类。不是吗。。??