[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[备忘]Java中父类和子类的成员变量同名的情况..

上一篇:[整理]Javascript使用“IE默认XSL”格式化XML字符串
下一篇:[备忘]VB串口通信,遭遇SetCommState总返回False…………

添加日期:2011/8/18 16:03:17 快速返回   返回列表 阅读8804次
Java的细节太多,几天不看就有些晕~~~~


public class A {
    protected String a = "1";
    
    public String getA(){
        return this.a;
    }
}

public class B extends A {

    protected String a = "2"; 
    
//    public String getA(){
//        return a;
//    }
    
    public static void main(String[] args) {
        
        B x = new B();
        System.out.println(x.getA());
    }
}



输出的是1,父类的方法看到的变量是父类中的a。
如果B中也写一个getA方法,看到的a就是子类中的a了。

所以,不要妄想子类重新声明变量的值就可以一了百了啦。

其实就是可见性的问题。
父类和子类的变量是同时存在的,即使是同名。
子类中看到的是子类的变量,父类中看到的是父类中的变量。
它们互相隐藏,而同名的方法则是实实在在的覆盖。

如A x = new B();
x是一个B,也是一个A,
那么调用方法时,是根据对象的实际类型调用的,
实际类型是B,所以永远调用子类的方法。

而访问成员变量就不同了,它是B时,访问的是子类的成员变量,
转型为A的话,访问的就是父类的成员变量了。

 

评论 COMMENTS
liuchuanfu
2014/8/8 21:56:01
学习了!

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved