在创建新方法时创建新对象,这怎么可能?

时间:2015-10-10 11:51:25

标签: java anonymous-class

所以我看了一个教程并看到了这行代码:

Thread timer = new Thread() {
  @Override 
  public void run(){
    // etc....
  }
}

这里发生了什么?他们正在创建Thread类的新对象,并声明在创建该对象时运行的方法?这怎么可能?我的理解是一个对象从它的类中得到了它的方法?

2 个答案:

答案 0 :(得分:0)

这是Anonymous Class。它定义/创建类,但在这一个地方重写或实现该类中的方法。无法在其他地方调用/创建匿名类。

当您的程序运行定义此匿名类的代码时,它将使用您在其中定义的方法创建此类的对象。对该创建对象的那些方法的任何后续调用都将使用您已定义的重写方法。

这可以用于类(如果它们不是final),抽象类和接口。

答案 1 :(得分:0)

这种机制被称为 匿名类 。因此,您可以通过实现所有abstact成员来声明类的新实例。 在此代码中,您通过实现 public void run()方法实现线程的匿名实例,因此您可以在正文中声明您的功能。

此处有更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html