我是 Java 新手。我无法理解匿名类实例
和接口(interface)
之间的关系。请引用 this website 中的示例:
// anonymous instance as a variable
Runnable r = new Runnable()
{
@Override
public void run()
{
//codes
}
};
Thread t1 = new Thread(r, "anonymous 1");
// anonymous instance as a parameter
Thread t2 = new Thread (new Runnable()
{
@Override
public void run()
{
//codes
}
}, "anonymous 2");
根据这个问题(http://stackoverflow.com/questions/11069056/why-java-interface-can-be-instantiated-in-these-codes)中的答案,我对匿名有了基本的了解类。
但是,我不明白这是什么:
Runnable r = new Runnable(){...};
在右侧,我们创建了一个匿名类的实例,因此它是一个类的对象
。在左侧,它是一个Interface
变量。
为什么可以将匿名类的实例分配给接口(interface)变量?
引用这个website :
Thread(Runnable target, String name)
线程似乎期望第一个参数是接口(interface)变量。
最佳答案
这段代码...
Runnable r = new Runnable(){...};
类Runnable
是一个接口(interface),所以你不能直接创建它的实例,这是正确的。但是,请注意 {...}
部分中的代码 - 这是以本地化方式实现接口(interface)的方法。
基本上,您正在创建一个接口(interface)实例,该实例只能通过定义 r
的方法查看和使用。由于您已经实现了 {...}
部分中的所有方法,因此该类是有效的,您可以像使用任何其他 Runnable
对象一样使用它。
这段代码...
Runnable r = new Runnable()
{
@Override
public void run()
{
//codes
}
};
实际上与执行以下操作相同...
public class MyRunnable implements Runnable {
public void run()
{
//codes
}
};
// This goes in your class where you want to create the Runnable object
Runnable r = new MyRunnable();
这两段代码都会创建一个变量r
,它是一个Runnable
实例。第一个解决方案是创建实例的简写,对于不需要在其他地方重用的东西很有用。第二种解决方案创建一个单独的类来实现接口(interface),并且可以在本地范围之外重用它。
只要分配给变量的对象实现该接口(interface),我们就可以存储具有接口(interface)类型的变量。所以,在代码中...
Runnable r = new Runnable(){...};
我们说的是 r
实现了 Runnable
接口(interface)。如前所述,{...}
中的位是实现接口(interface)的位置,因此一切正常。
关于java - 为什么可以将匿名类的实例分配给接口(interface)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11069371/