class Test {
public static void main(String[] args) {
dog d = new dog("旺财");
System.out.println(d.getName());
//dog类继承了父类的getName()方法,但是他没有name成员变量,getName()方法里的this.name,这个this不应该是“旺财”这个对象吗?这个对象存在堆中并没有name成员变量啊?
}
}
class animal {
private String name;
public animal() {
}
public animal(String name) {
this.name=name;
}
public void setName(String name) {
this.name=name;
}
public String getName() {
return this.name;
}
}
class dog extends animal {
public dog() {
}
public dog(String name) {
super(name);
}
} 作者: LoveGG 时间: 2016-6-25 00:18
/dog类继承了父类的getName()方法,但是他没有name成员变量,getName()方法里的this.name,这个this不应该是“旺财”这个对象吗?这个对象存在堆中并没有name成员变量啊?
分析回答:
1.dog继承了父类,可以拥有父类的全部成员变量和方法,private修饰符表示只能在该类中被该类访问,并不是不能被继承,(只有final修饰的类不可被继承),所以dog有name的成员变量的;加上private修饰表示不能d.name这样去用,但是可以d.getName()得到名字,
2.this是代表d这个对象,这个对象的是Dog的实例,这个对象的名字属性是“旺财”,而不是说这个对象是旺财,
3.在堆内存中有这个成员变量,这个成员变量是一个引用变量,因为是name是字符串,不懂看内存图D:\内存图