码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA成员变量的隐藏

时间:2017-09-21 00:24:01      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:.com   ips   简单的   pre   成员   clip   color   阅读   有一个   

一、如果子类与父类中有一个相同名称的成员变量,那么子类的成员变量会不会覆盖父类的成员变量?我们看下在的例子:

public class A {
    public int x=10;
}


public class B extends A {
    public int x=20;
}

public class C {
    public static void main(String[] args) {
        A a=new B();
        System.out.println(a.x);    //1
        B b=new B();
        System.out.println(b.x);    //2
        
        System.out.println(((A)b).x);   //3
    }
}

运行C类的main方法的结果为:

10
20
10

通过结果我们可以看出子类是不会覆盖父类的成员变量,我们eclipse的调试工具也能很清晰的看出在对像a中同时存在两个x的成员变量(其中一个是父类的),如下图示:

技术分享

通过第1个和第3个的结果,可以得出对像对于成员的直接访问是静态邦定的 ,官方解释如下:

 

在一个类中,子类中的成员变量如果和父类中的成员变量同名,那么即使他们类型不一样,只要名字一样。父类中的成员变量都会被隐藏。
在子类中,父类的成员变量不能被简单的用引用来访问。而是,必须从父类的引用获得父类被隐藏的成员变量,一般来说,我们不推荐隐藏成员变量,
因为这样会使代码变得难以阅读。

对于静态方法与成员变量类似,如下:
 
public class A {
    public static void print() {
        System.out.println("A Static ");    
    }
}

public class B extends A {
    public static void print() {
        System.out.println("B Static ");    
    }

}


public class C {
    public static void main(String[] args) {
        A a=new B();
        a.print();
        
        B b=new B();
        b.print();
        ((A)b).print();
        
        
    }
}

结果如下:

A Static
B Static
A Static

 

 

 

 

JAVA成员变量的隐藏

标签:.com   ips   简单的   pre   成员   clip   color   阅读   有一个   

原文地址:http://www.cnblogs.com/bateman6988/p/7565596.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!