快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

在csdn上看到的怪问题


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 中文问题的处理
    微笑服务 优质保证 索取样品