|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
public class test2 { public String user = "test2"; public test2() { } public String getUser(){ System.out.println(this.user); //这里打印的为什么是"test2",而不是"test4" user = getPassword(); //这里执行的为什么是test3的方式,而不是本身定义的方式呢 return user; } public String getPassword(){ System.out.println(this.user); return "hello test2"; }} public class test3 extends test2{ public String user = "test3"; public test3() { } public String getPassword(){ System.out.println(this.user); return "hello test3"; }} public class test4 extends test3{ public String user = "test4"; public test4() { } public static void main(String[] args){ test4 t4 = new test4(); t4.getUser(); }} 输出结果是:test2,test3被给分人的解答是: 1.这是个作用域的问题!由于在继续中,只是针对方式的覆盖,对于属性并没有覆盖的作用。 那样来说,user这个属性,在一个test4的对象里面就有3份! 在test4的作用范围内,他就是test4,test3的范围内就是test3. 这个问题,可能比较难以让人理解。但是你想一下类代码的调用方法你就明白了! 假如你学过c的话,你肯定知道,全局变量带来的副作用,哈哈,跟这个类似! 不过这个问题,似乎还真不是个一般的问题,我用jb跟踪执行的时候,那个user一直是test4,但是实际输出的就不是了! 不知道jb的调试工具,对这个问题怎么考虑的!2.this传的是当前调用方式的对象的句柄,在本例中是test4,而它有三个user属性,它们是有各自的属性域的,即在test2中只显示"test2",即在test3中只显示"test3"(若在test3中也重写一段getuser(),那就会显示"test3",感觉就是三个属性只在自己娘家才会显现出对应的那个);对于方式,则只是调用最近一层父类的方式,所以调用test3的getpassword()方式. 返回类别: 教程 上一教程: 利用Java Reflection(反射)原理,在hibernate里面实现对单表、视图的动态组合查询 下一教程: HibernateInit 您可以阅读与"在csdn上看到的怪问题"相关的教程: · java日记(3) 类的初始化问题(CSDN一个问题有感) · Java使用Oracle碰到的最大游标超出问题及其解决方式 · 一个聊天室中碰到的问题! · JSP应用程序开发中安全问题的实例解析 · java 与 mysql 中文问题的处理 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |