Java成员变量的隐藏(实例讲解)

2025-05-29 0 20

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
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的成员变量(其中一个是父类的),如下图示:

Java成员变量的隐藏(实例讲解)

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

在一个类中,子类中的成员变量如果和父类中的成员变量同名,那么即使他们类型不一样,只要名字一样。父类中的成员变量都会被隐藏

在子类中,父类的成员变量不能被简单的用引用来访问。而是,必须从父类的引用获得父类被隐藏成员变量,一般来说,我们不推荐隐藏成员变量

因为这样会使代码变得难以阅读。

对于静态方法与成员变量类似,如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26
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成员变量隐藏(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

原文链接:http://www.cnblogs.com/bateman6988/archive/2017/09/20/7565596.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java成员变量的隐藏(实例讲解) https://www.kuaiidc.com/115012.html

相关文章

发表评论
暂无评论