为什么要有get方法?-多态内存分析的应用
Posted 寂寞的小丑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么要有get方法?-多态内存分析的应用相关的知识,希望对你有一定的参考价值。
在处理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方法?-多态内存分析的应用的主要内容,如果未能解决你的问题,请参考以下文章
彻底深入理解和分析Java中OutOfMemoryError内存溢出