The value is 2;The value is 2;
解决方案 »
- 突然发现自己的日食打不开了!
- 请问repaint命令为什么不执行?急!
- 读取utf-8会乱码 但是读取gb2312正常 谢谢各位帮忙
- 如何防止多个用户同时执行某一个方法或类?
- 应该如何修改JFrame的size?
- 能运行HelloWorld但是不能运行Receive呢,提示:Exception in thread "main" java.lang.NoClassDefFoundError(60分!)
- 怎么不能运行啊?请教达人
- con = ds.getConnection()取不到连接,抛SQLException
- 为什么我被扣了信誉分 但是信誉分记录里面没有任何记录?
- java的所有参数传递都是按值传递的!!!高手解释一下
- 这说的是什么呀,(一个题目),我怎么看不懂?
- 如何将一个十进制转换为八进制呢?请各位大侠不吝赐教
The value is 3
The value is 3 我用JB6.0跟踪内存数据时,数据x一直为2 。
至于为什么我来说说:
JAVA中所有的方法都采用后期绑定,也就是相当于C++中的虚函数动态绑定。但对于属性却不是后期绑定,而是早期绑定,所以b.show()的时候调用的是Derived类的show()方法。而b.x=3
所谓隐藏就是指子类拥有两个同名变量,一个继承自父类,一个由自己定义。当子类执行继承自父类的操作时,处理的是继承自父类的变量,当执行由子类本身定义的操作时,处理就是自己定义的变量,而把继承自父类的变量“隐藏”起来。
也就是说,在Derived类创建的时候,分配了两个x的空间,但是对于外部来说,它只有一个变量x。
而方法的继承则和域中变量的继承不一样:当父类中一个方法被子类覆盖时,它所占用的内存空间将被完全清空,父类的方法在子类中将不复存在。
Base类的对象b的创建是通过new一个Derived来完成的,因此b这个句柄指向的对象其实是Derived类的一个实例,在实例b中,内存空间中分配了两个同名的x,b.show()由于在Derived类里被覆盖了,调用的也是Derived类里面的show()方法,因此这个show()操作的是Derived类里面的x,所以值为2。而b.x=3是因为b的类型是Base,b.x是显式的调用Base类里继承的变量x,所以显示的是Base类所赋的值。
其实我也是从这个学期才刚开始学java的
希望和大家一起共同提高
[email protected]