当用子类的构造方法创建一个子类的对象时,系统不仅为子类中声明的成员变量分配了内存,而且为父类的成员变量也都分配了内存空间,但是只将子类继承父类的那部分成员变量,作为分配给子类对象的变量,如子类从父类中继承的public或protected成员变量,也就是说,尽管系统已经为父类中的private成员变量分配了内存空间,但是它们照样不能作为子类对象的变量,即子类不能继承父类的私有成员变量。同样的,假如子类和父类不在同一个包中,尽管系统为父类的友好成员变量分配了内存空间,但是也不能为子类对象的变量,即如果子类和父类不在同一个包中,子类不继承父类的友好成员变量。
照上面那样说,我们觉得子类创建对象时似乎浪费了一些内存,因为当用子类创建对象时,父类的成员变量也都分配了内存空间,但是在继承时,纸浆其中的一部分作为分配给子类对象的变量。比如,父类中的private成员变量尽管分配了内存空间,但也不作为子类对象的变量,当然它们也不是父类某个对象的变量,因为我们根本就没有使用父类创建任何对象。所以说,这部分似乎就像是成了垃圾一样,但事实上是不是这样呢?实际情况并非如此,我们需要注意到,子类中还有一部分方法是从父类继承的,而这部分方法却可以操作这部分未继承的变量。
例如:
People.java
public class People {
private int averHeight = 166;
public int getAverHeight(){
return averHeight;
}
}
ChinaPeople.java
public class ChinaPeopleextends People{
int height;
public void setHeight(int h){
//height= h + averHeight; //非法,子类没有继承父类中private的成员变量averHeight
height= h;
}
public int getHeight(){
return height;
}
}
Test.java
public class Test {
public static void main(String[] args){
ChinaPeoplexiaoming =new ChinaPeople();
System.out.println("子类对象未继承的averHeight的值是:" + xiaoming.getAverHeight());
xiaoming.setHeight(183);
System.out.println("子类对象的实例变量height的值是:" + xiaoming.getHeight());
}
}
相信朋友们心中已经懂了,如果不太懂的话,那就是子类和父类的继承问题有点模糊,那么请访问这个地址:http://blog.csdn.net/wbh119/article/details/51491339