码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-06-10 00:52:04      阅读:177      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!