//在注释的地方选择合适的选项填入,以保证程序可以从1记数到100
class Counter
{
public int startHere=1;
public int endHere=100;
public static void main(String[] args)
{
new Counter().go();
}
void go()
{
//**********
Thread t=new Thread(a);
t.start();
}
}
A. Thread a=new Thread()
{
public void run()
{
for (int i=startHere;i<=endHere;i++)
System.out.println(i);
}
};
B. Runnable a=new Runnable()
{
public void run()
{
for (int i=startHere;i<=endHere;i++)
System.out.println(i);
}
};
我一看,就选择了B,可以我错了,答案是AB.
我觉得就纳闷了,怎么Thread的构造器怎么还有Thread(Thread t)这种形式的啊?
哦,仔细想想,应该是Implicit Casting的情况,因为Thread类实现了Runnable接口,所以Thread类的匿名子类可以上溯造型到Runnable型,作为Runnable型的参数传入Thread构造器.
不知道大家的看法如何?
-------------------------------------------------------------------------------------------------
同意。
Thread当然也是Runnable的了。
------------------------------------------------------------------------------------------------
原因就是如此,不过不只是匿名子类可以,Thread类本来就可以被强制转换为Runnable类型
class Counter
{
public int startHere=1;
public int endHere=100;
public static void main(String[] args)
{
new Counter().go();
}
void go()
{
//**********
Thread t=new Thread(a);
t.start();
}
}
A. Thread a=new Thread()
{
public void run()
{
for (int i=startHere;i<=endHere;i++)
System.out.println(i);
}
};
B. Runnable a=new Runnable()
{
public void run()
{
for (int i=startHere;i<=endHere;i++)
System.out.println(i);
}
};
我一看,就选择了B,可以我错了,答案是AB.
我觉得就纳闷了,怎么Thread的构造器怎么还有Thread(Thread t)这种形式的啊?
哦,仔细想想,应该是Implicit Casting的情况,因为Thread类实现了Runnable接口,所以Thread类的匿名子类可以上溯造型到Runnable型,作为Runnable型的参数传入Thread构造器.
不知道大家的看法如何?
-------------------------------------------------------------------------------------------------
同意。
Thread当然也是Runnable的了。
------------------------------------------------------------------------------------------------
原因就是如此,不过不只是匿名子类可以,Thread类本来就可以被强制转换为Runnable类型