匿名内部类请求澄清

an0*_*00b 3 java anonymous-types inner-classes

在 Android 上学习 TTS 时,我遇到了以下代码片段:

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

我对 Java 真的很陌生,所以我对识别各种构造的信心并不是那么好。我认为我在上面看到的是一个匿名内部类,但“ new OnClickListener() ”让我感到困惑。因此,请确认和/或更正以下任何理解:

  1. 内部类是在 new OnClickListener() 之后定义的。
  2. OnClickListener 是派生内部类的超类。
  3. (匿名)内部类只有一个成员函数:OnClick()。
  4. 内部类定义中的@Override 是什么?如果这是一个注释,那么我很困惑,因为这个答案指出匿名内部类不能被注释。

最后,有没有一种方法可以让像我这样的 n00b 更容易破译上面的代码片段?

SLa*_*aks 5

  1. 是的; 它在大括号之间定义。
  2. 是的,除了它是一个接口,而不是一个类。
  3. 是的。
  4. 您不能添加类级别的注释。
    @Override是一个方法级别的注释,工作正常。