这主要是this的问题
假如你在test2中写 user = this.getPassword();//估计就应该是test2了。
假如你在test2中写 user = this.getPassword();//估计就应该是test2了。
解决方案 »
- 求教final的用法
- 从JTextField向数据库中插入数据
- 帮我写下这个正则表达式!
- 请教winsock的问题,Java利用udp与VB无法通信吗?急!
- 如何在swing组件(如:jlabel)上设置一个超链接。就像html页面上的超链接一样!!
- Array向Vector赋值问题,谢谢!
- 急求指教:使用Collections类有什么好处?
- java访问sqlserver2000出现的奇怪问题,请高手帮忙!谢谢
- Java与C++应用领域的区别是什么?
- java.rmi.ConnectException
- 关于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.
不知各位意见如何???