子类对象内存的问题

   当用子类的构造方法创建一个子类的对象时,系统不仅为子类中声明的成员变量分配了内存,而且为父类的成员变量也都分配了内存空间,但是只将子类继承父类的那部分成员变量,作为分配给子类对象的变量,如子类从父类中继承的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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值