代码如下,在进行Sub s=(Sub)b时报出类型转化错误,请高手给说明一下类型转化的原理,多谢了。class Base{}
class Sub extends Base{}
class Sub2 extends Base{}public class MyClass
{
public static void main(String[] args)
{
Base b=new Sub();
Sub s=(Sub) b; //
}
}
class Sub extends Base{}
class Sub2 extends Base{}public class MyClass
{
public static void main(String[] args)
{
Base b=new Sub();
Sub s=(Sub) b; //
}
}
Exception in thread "main" java.lang.ClassCastException: com.example.Base cannot be cast to com.example.Sub
at com.example.scjp.MyClass.main(MyClass.java:13)
子类可以强转父类的
就像 Object o 可以被强转成 (String) o
class Sub extends Base{}
class Sub2 extends Base{}public class MyClass
{
public static void main(String[] args)
{
Base b=new Base(); //这里改了
Sub s=(Sub) b; //
}
}请高手再帮忙看看。
转换不是这样一个原则吗:
1,向上转是不需要强制转换的
Sub b=new Sub();
Base s= b;
2,向下转就需要强制转换了
Base b=new Base();
Sub s=(Sub) b; 如一楼所说,四边形向正方形转就需要强制转换才对啊
就像下面这样;
Base[] bb=new Base[2];
bb[0]=new Sub();
bb[1]=new Sub2();
Sub ss=(Sub)bb[0];好的 谢谢各位高手们了,散分,分不多 一点意思。
因为这个观点是错的,实在不好意思,应该是将基类的对象赋值给扩展类的引用是错的。。
Base b = new Base();
Sub s = b; // error
Sub s = (Sub)b; // error 因为这里的b只有扩展类的信息。。而却希望得到更多的即扩展类的信息是错误的