这主要是this的问题
假如你在test2中写 user = this.getPassword();//估计就应该是test2了。
假如你在test2中写 user = this.getPassword();//估计就应该是test2了。
解决方案 »
- String转换xml 问题
- 为什么editplus 一运行这个java代码就没响应啦?
- 关于java socket 通讯的问题求教(急,在线等散分)
- 请问UML中 asynchronous 和 synchronous message的区别
- 线程池中的线程可以多次使用吗?
- 周末做兼职
- 用JTextArea显示程序运行状态的问题
- 如何将这一UNICODE字符串"4f60597d"转换回中文???
- 求SQL Server 2000 JDBC的用法!(高分)
- 谁能把这个Applet下载下来吗?我用NetAnts不行。请指教!http://www4.cmbchina.com/javahq/fenshi.htm
- 关于tree节点拖拉不能删除的问题(附源码)
- !!!如何将两个byte[]连接成一个byte[]
System.out.println(this.user);//这里打印的为什么是"test2",而不是"test4" 注意 this
user = getPassword();//这里执行的为什么是test3的方法,而不是本身定义的方法呢 test4 extends test3, 当然用 test3 的方法, 除非 test3并没有复写test2的方法
System.out.println(this.user);//这里打印的为什么是"test2",而不是"test4" 注意 this
user = getPassword();//这里执行的为什么是test3的方法,而不是本身定义的方法呢 test4 extends test3, 当然用 test3 的方法, 除非 test3并没有复写test2的方法
总是调用最近的一级父类的方法的.
返回到最上层的基类开始调用,也就是说getUser方法是在test2中执行的所以打印的是"test2",那么在执行getUser的期间调用了getPassword怎么又跑到test3的方法里去了,test2不是自己已经定义了getPassword方法吗,难道此方法因为被覆写了,就无效了吗。
由于在继承中,只是针对方法的覆盖,对于属性并没有覆盖的作用。那样来说,user这个属性,在一个test4的对象里面就有3份!在test4的作用范围内,他就是test4,test3的范围内就是test3.这个问题,可能比较难以让人理解。但是你想一下类代码的调用方式你就明白了!如果你学过c的话,你肯定知道,全局变量带来的副作用,哈哈,跟这个类似!不过这个问题,好像还真不是个一般的问题,我用jb跟踪执行的时候,那个user一直是test4,但是实际输出的就不是了!不知道jb的调试工具,对这个问题怎么考虑的!
当test4调用getUser方法时找到的是test2的getUser方法,但在执行的时候碰到getPassword方法调用,又跑到test3的方法里去了,所以结果打印的是"test2","test3",但这个执行流程是不是有点太不好理解了(当test2的getUser方法执行的时候,一个现成的getPassword方法不用,偏要去调用test3的getPassword方法)写得比较罗嗦,请不要介意
假如你在test2中写 user = this.getPassword();//估计就应该是test2了。测试了一下,test2中改成user = this.getPassword(),运行结果还是一样:test2,test3
我也搞不明白了,请高手指教一下。
System.out.println(this.user);//这个user是在test2的作用域中,因此调用的是test2的成员变量user
而当t4调用getpassword()时,test3的这个方法覆盖了test2的这个方法,实际上t4是将自己上溯变成了(test3),所以打印为test3.
不知各位意见如何???