当前位置: 技术问答>java相关
请问各位牛人,有高分哦!在线等待...............
来源: 互联网 发布时间:2017-04-01
本文导语: public class Piont{ ...... } public class Circle extends Point{ ....... } public class classname{ public static void main(String []args} { Piont piontRef,p; Circle circleRef,c; p=new Piont(30,50) c=new Circle(2.7,120,89); piontRe...
public class Piont{
......
}
public class Circle extends Point{
.......
}
public class classname{
public static void main(String []args}
{
Piont piontRef,p;
Circle circleRef,c;
p=new Piont(30,50)
c=new Circle(2.7,120,89);
piontRef=c;
circleRef=(Circle)piontRef;
}
}
问题:
1,为什么“circleRef=(Circle)piontRef”可以编译通过,不是说“把超类的对象当做子类来使用会有错误吗?”
2,如果将“piontRef=c;”改写成:“piontRef=p;”为什么“circleRef=(Circle)piontRef;”这句不能编译通过,为什么!
请高手解答?????
......
}
public class Circle extends Point{
.......
}
public class classname{
public static void main(String []args}
{
Piont piontRef,p;
Circle circleRef,c;
p=new Piont(30,50)
c=new Circle(2.7,120,89);
piontRef=c;
circleRef=(Circle)piontRef;
}
}
问题:
1,为什么“circleRef=(Circle)piontRef”可以编译通过,不是说“把超类的对象当做子类来使用会有错误吗?”
2,如果将“piontRef=c;”改写成:“piontRef=p;”为什么“circleRef=(Circle)piontRef;”这句不能编译通过,为什么!
请高手解答?????
|
你注意
c = new Circle(2.7,120,89);
piontRef=c;//
也就是说 Piont piontRef = new Circle(2.7,120,89);
这个时间piontRef的形式对象是Piont,但是实际对象是Circle,向下转型
circleRef = (Circle)piontRef;
piontRef的实际类型就是Circle啊,这时用强制转换,是可以的啊
c = new Circle(2.7,120,89);
piontRef=c;//
也就是说 Piont piontRef = new Circle(2.7,120,89);
这个时间piontRef的形式对象是Piont,但是实际对象是Circle,向下转型
circleRef = (Circle)piontRef;
piontRef的实际类型就是Circle啊,这时用强制转换,是可以的啊
|
1,编译期只判断强制转换的可能性有没有,将父类对象引用转换为子类对象引用是合法的,当实际运行时被转换的对象根本不是目标类型或其子类时,会发生运行期错误。
2,没理由编译不过,运行肯定出错!
2,没理由编译不过,运行肯定出错!