如果把第一个问题修改为:
Parent p = new Parent(); Parent d1 = new DerivedOne(); DerivedTwo d2 = new DerivedTwo();
d1 = (DerivedOne)p; 就可以转换了 !!
Parent p = new Parent(); Parent d1 = new DerivedOne(); DerivedTwo d2 = new DerivedTwo();
d1 = (DerivedOne)p; 就可以转换了 !!
进行向下强制转型时,必须保证对象的类型是子类类型,如: Parent p = new DerivedOne();
DrivedOne d1 = (DerivedOne);
是正确的.问题2:
按照你的程序,没去掉注释前输出为: I am false interface
I am false String 将注释行的注释符号去掉,而将原来的String声明行注释掉。那么输出结果为:
I am true interface
I am true String 关于接口部分我想你应该知道原因了, 没有实现接口时,肯定输出false
对于String, 在没有实例化时,即 String s;
由于 s 是 null, 即引用s没有指向任何对象,所以输出为false.
实例化后: 即String s = "asdasd"; ,此时引用s指向String对象, 输出为true. 原因是, instanceof是判断引用指向的对象是什么类型,而不是判断引用本身是什么类型!问题3: public void run()
{
while( true )
{
doStuff();
}
System.out.println("Exiting run");//第15行 编译错误: unreachable statement
// 这句放在一个死循环后面了,所以到达不了!
}