这是因为方法覆盖的原因,你的base B = new SubClass();所以它调用的是subclass的实例的方法。
解决方案 »
- JAVA编程题
- 又是一个复合赋值运算与简单赋值问题
- byte类型的最小值为什么是-128而非-127?
- 谁能用Java知识给我解释一下这一句呢?
- 多线程问题-禁止中断
- 请问,该怎么得到某个被创建的JInternalFrame窗口的得父Frame呢?
- 还是Applet在浏览器运行的问题!!我被搞败了...大侠帮我.
- 怎样向一个已存在文件写数据?
- 我是编译通过了,但是运行时却有这样的错误,怎么回事啊?
- 谁能告诉我 sql server 2000 jdbc驱动程序应该怎么设置,如果设环境变量怎么设,谢谢!
- 谁能告诉我什么时候class要implements Serializable?
- 如何用java将一个文件以字节流形式保存到sqlserver数据库中(给高分)
b实际指向的是一个subClass类(子类)的对象,其上溯造型到base(父类)
此时,b(儿子)是以父亲的身分出现,别人要访问b的属性时,得到的当然是父亲的属性值,也就是b.x为2
而b.method()方法执行的是b儿子的方法,因为父亲能做的事,儿子可不一定会啊,所以返回的是3.
先前说过,b(儿子)是以父亲的身份出现的,既然是以父亲的身份出现的,那么b的身份就是父亲,即其b的属性是父亲的属性,也就是说b.x=2;
对于方法b.method()而言,是要b(儿子)做件事情,当然是b(儿子)自己做,又不是他父亲做。因此,b.method()返回的是3。