欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

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

时间:2021-07-12 13:29:03|栏目:JAVA代码|点击:

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

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

上一篇:springboot整合druid连接池的步骤

栏    目:JAVA代码

下一篇:spring boot + quartz集群搭建的完整步骤

本文标题:Java成员变量的隐藏(实例讲解)

本文地址:http://www.codeinn.net/misctech/156118.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有