为什么我们在Java中使用带有接口的"new"关键字?

Ars*_*Ali 3 java oop android

我是Android的新手.我已经学习了基本的面向对象编程课程,这些课程为课程提供了一种增强功能的方法.实际上以这种方式增强其功能的类,实现这些接口并覆盖在接口中编写的所有方法.

以下代码在Android中执行相同的工作:

public class MyActivity extends Activity implements OnClickListener {
   // All other code you may expect

   myButton.setOnClickListener(this);

   @override
   public onClick(View view) {
      // Code when view is clicked
   }
} 
Run Code Online (Sandbox Code Playgroud)

这段代码是可以理解的.但是下面的代码对我来说没有任何意义,我在不同的地方搜索过但没有得到满意的答案.

public class MyActivity extends Activity {
   // All other code you may expect

   myButton.setOnClickListener(new OnClickListner() {

      @override
      public onClick(View view) {
         // Code when view is clicked
      }
  });
}
Run Code Online (Sandbox Code Playgroud)

现在,OnClickListener()是Android文档中所说的界面,现在我们正在实例化一个界面.不是只实现接口吗?请帮我理解这一点.

Per*_*ror 11

new OnClickListner() {它不是实例化接口,而是声明一个 匿名内部类.基本上是一个匿名类(实现接口OnClickListner的类),它本身没有名称.

来自文档:

匿名类表达式包含以下内容:

  • 新的运营商
  • 要实现的接口的名称或要扩展的类.在此示例中,匿名类正在实现OnClickListner接口.
  • 括号,包含构造函数的参数,就像普通的类实例创建表达式一样.注意:在实现接口的情况下,没有构造函数,因此您使用一对空括号,就像在此示例中一样.
  • 身体,是一个类声明体.更具体地说,在正文中,方法声明是允许的,但语句不是.