首页 > 其他 > 详细

为什么要有get方法?-多态内存分析的应用

时间:2016-06-10 00:49:28      阅读:200      评论:0      收藏:0      [点我收藏+]
在处理java类中的成员变量时,并不是采用运行时绑定,而是一般意义上的静态绑定。所以在向上转型的情况下,对象的方法可以找到子类,而对象的属性还是父类的属性。
代码如下:
Java代码
public class Father {

  protected String name="父亲属性";
  
  public void method() {
    System.out.println("父类方法,对象类型:" + this.getClass());
  }
}
  
public class Son extends Father {
  protected String name="儿子属性";
  
  public void method() {
    System.out.println("子类方法,对象类型:" + this.getClass());
  }
  
  public static void main(String[] args) {
    Father sample = new Son();//向上转型
    System.out.println("调用的成员:"+sample.name);
  }
}
结论,调用的成员为父亲的属性。
现在试图调用子类的成员变量name,该怎么做?最简单的办法是将该成员变量封装成方法getter形式。
代码如下:
Java代码
public class Father {
  protected String name = "父亲属性";
  public String getName() {
    return name;
  }
  public void method() {
    System.out.println("父类方法,对象类型:" + this.getClass());
  }
}
  
public class Son extends Father {
  protected String name="儿子属性";
  
  public String getName() {
    return name;
  }
  
  public void method() {
    System.out.println("子类方法,对象类型:" + this.getClass());
  }
  
  public static void main(String[] args) {
    Father sample = new Son();//向上转型
    System.out.println("调用的成员:"+sample.getName());
  }
}

结果:调用的是儿子的属性
sample是Father类型的,sample可以看到Father类的属性名name,方法名getName和方法名method,当调用getName方法时sample先找到自己的方法名getName,然后拿着方法名getName到代码区找方法体,发现有两个getName方法,虚拟机一看具体的对象是Son,就选择了Son的getName方法

为什么要有get方法?-多态内存分析的应用

原文:http://www.cnblogs.com/lonely-buffoon/p/5572957.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!