我慢慢地从C ++过渡到java,我不明白以下代码:
public class TestThread
{
public static void main (String [] args)
{
Thread t = new MyThreads()
{
public void run()
{
System.out.println(" foo");
}
};
t.start();
System.out.println("out of run");
}
}
对象类型" MyThreads"正在被实例化,但是函数" void运行"意思?
为什么在对象实例化之后立即使用该语法编写?
该功能是否被覆盖?
何时需要/需要这种语法(我用对象实例化定义函数)?它在哪里首选/有用?
答案 0 :(得分:0)
此代码相当于
public class TestThread
{
static class MyThreadSubclass extends MyClass {
public void run() {
System.out.println("foo");
}
}
public static void main (String [] args)
{
Thread t = new MyThreadSubclass();
t.start();
System.out.println("out of run");
}
}
这是一种定义内联子类的简便方法,无需为其命名;这只是语法糖。它创建了一个子类的对象,它覆盖了run()
中的方法MyThreads
。
答案 1 :(得分:0)
这意味着类MyThreads
或者要求您首先编写名称为run的方法,或者您正在执行的方式提供了更改现有run方法行为的能力。
如果您已经存在run方法或者在您想要创建对象时创建方法,那就像重写一样。
这提供了创建MyThreads
对象的功能,而无需更改原始类或创建多个类。
public class TestThread
{
public static void main (String [] args)
{
Thread t = new MyThreads()
{
public void run()
{
System.out.println(" foo");
}
};
t.start();
Thread t1 = new MyThreads()
{
public void run()
{
System.out.println(" this time it is somethidn else");
}
};
t1.start();
System.out.println("out of run");
}
}
对代码的修改很少显示具有此功能的优势。如果你观察到t1的run方法正在做一些不同于t的东西。所以它现在是全新的线程。