我是 Java 新手。我无法理解之间的关系anonymous class instance
and interface
。请参阅中的示例这个网站:
// 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");
根据这个SO问题(http://stackoverflow.com/questions/11069056/why-java-interface-can-be-instantiated-in-these-codes)的答案,我对匿名类有了基本的了解。
但是,我不明白这是什么:
Runnable r = new Runnable(){...};
在右侧,我们创建了一个匿名类的实例,因此它是一个object of a class
。在左侧,它是一个Interface
多变的。
为什么可以将匿名类的实例分配给接口变量?
参考这个website:
Thread(Runnable target, String name)
线程似乎期望第一个参数是接口变量。
这段代码...
Runnable r = new Runnable(){...};
班上Runnable
是一个接口,所以你不能直接创建它的实例,这是正确的。但是,请注意以下代码{...}
部分 - 这是以本地化方式实现接口的方法。
基本上发生的事情是您正在创建接口的实例,该实例只能通过以下方法查看和使用:r
被定义为。由于您已经实现了中的所有方法{...}
部分,该类是有效的,您可以像使用任何其他类一样使用它Runnable
object.
这段代码...
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
实例。第一个解决方案是创建实例的简写,对于不需要在其他地方重用的东西很有用。第二种解决方案创建一个单独的类来实现该接口,并且可以在本地范围之外重用它。
我们能够使用接口类型存储变量,前提是分配给变量的对象实现了该接口。所以,在代码中...
Runnable r = new Runnable(){...};
我们是说r
实施Runnable
界面。中的位{...}
如前所述,是实现接口的地方,因此一切正常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)