class yangxi
{
void abcdef()
{
System.out.println("yangxi");
}}
class yangxi2 extends yangxi
{
int abc=123;
}
public class yangxi1
{
public static void main(String[] args)
{
yangxi2 aaa=new yangxi2();
yangxi bbb=new yangxi();
aaa.abcdef();
((yangxi2)bbb).abc=456; System.out.println(((yangxi2)bbb).abc);
}
}编译没有问题,可运行的时候用子类的对象调用父类的方法成功。可为什么用强制类型转换的父类对象调用子类的变量就不行呢?
将yangxi bbb=new yangxi();改为yangxi bbb=new yangxi2();后就能得到结果了!这又是为什么?
希望高手给解决一下。谢谢!运行结果:
yangxi
Exception in thread "main" java.lang.ClassCastException
at yangxi1.main(yangxi1.java:21)
Press any key to continue...
{
void abcdef()
{
System.out.println("yangxi");
}}
class yangxi2 extends yangxi
{
int abc=123;
}
public class yangxi1
{
public static void main(String[] args)
{
yangxi2 aaa=new yangxi2();
yangxi bbb=new yangxi();
aaa.abcdef();
((yangxi2)bbb).abc=456; System.out.println(((yangxi2)bbb).abc);
}
}编译没有问题,可运行的时候用子类的对象调用父类的方法成功。可为什么用强制类型转换的父类对象调用子类的变量就不行呢?
将yangxi bbb=new yangxi();改为yangxi bbb=new yangxi2();后就能得到结果了!这又是为什么?
希望高手给解决一下。谢谢!运行结果:
yangxi
Exception in thread "main" java.lang.ClassCastException
at yangxi1.main(yangxi1.java:21)
Press any key to continue...
解决方案 »
- 求解决读usb时错误:no jusb in java.library.path
- mysql 语句 什么的问题
- java构造方法是线程安全的么?
- java基本类型的默认值
- jbutton当鼠标移入时显示提示
- 高难.如何让一个HttpServletResponse能forward两次? 或通过一个HttpServletResponse生成另一个HttpServletResponse
- 一个菜到不能在菜的问题了!@#$%
- SQL难题
- 如何避免抛出invalid column index错误
- JDK1.3.1下的htmlconverter如何使用?
- [求助!!!] Java中执行jar
- 求switch的特殊用法
父拥有的不一定子就拥有,所以会出问题。
而在子类里有了,即使把他强制转换为父类,他的内存空间里还是没有
yangxi bbb=new yangxi();
((yangxi2)bbb).abc=456;
注意new的是yangxi这个类,也就是说分配了的是yangxi这个类的内存空间。但是yangxi2这个类的内存空间却没有被分配。abc是yangxi2的成员变量。没有分配内存空间,当然是获取不出来的。类型转换只不过是把bbb转换成为yangxi2这个类型,但是里面的内容却是没有增加的。
另一种情况:
yangxi bbb=new yangxi2();
new的是yangxi2,分配的是yangxi2的内存空间,abc还正好是yangxi2的成员变量。当然不报错。