The value is 2;The value is 2;
解决方案 »
- 谁能告诉我List<Operator>怎么遍历
- eclipse 的中文帮助文档
- 求助:(网络编程)为什么这个程序不能运行?
- 关于静态变量性能的问题,求助
- 如何加载图标啊```
- 请问Vector类中的elementAt(int index) 和get(int index)有什么区别吗?
- 兄弟们帮帮我啊?刚学JAVABEAN的,郁闷,在线等,一个简单JAVABEAN数据库插入问题!!!
- 請幫忙看一下,把一個文件,或者文件來轉換成xxx.rar的問題 急急急
- 如何写文件到本地,而不是写到服务器上?
- JAVA HashMap是怎么解决冲突的?
- 这说的是什么呀,(一个题目),我怎么看不懂?
- 如何将一个十进制转换为八进制呢?请各位大侠不吝赐教
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]