当用子类的构造方法创建一个子类的对象时,不仅子类中声明的成员变量被分配了内存,而且父类的成员变量也都分配了内存空间,但只将子类继承的那部分成员变量作为分配给子类对象的变量。
也就是说,父类中的private成员变量尽管分配了内存空间,也不作为子类对象的变量;同样,如果子类和父类不在同一包中,尽管父类的友好成员变量分配了内存空间,但也不作为子类对象的变量。
此时,我们或多或少觉得子类创建对象时似乎浪费了一些内存。这是因为当用子类创建对象时,父类的成员变量也都分配了内存空间,但只将其中一部分作为分配给子类对象的变量。比如:父类中的private成员变量尽管分配了内存空间,也不作为子类对象的变量,当然他们也不是父类某个对象的变量,因为我们根本就没有使用父类创建任何对象。但是,我们要注意到,子类中还有一部分方法是从父类继承的,这部分方法却可以操作这部分未继承的变量。
例如:子类ChinaPeople的对象调用继承的方法操作未被子类继承却分配了内存空间的变量。
class People { private int averHeight = 168; public int getAverHeight() { return averHeight; } } class ChinaPeople extends People { int height; public void setHeight(int h) { //height = h+averHeight; //非法,子类没有继承averHeight height = h; } public int getHeight() { return height; } } public class Main public static void main(String args[]) { ChinaPeople zhangSan = new ChinaPeople(); System.out.println("子类对象未继承的averageHeight的值是:"+zhangSan.getAverHeight ()); zhangSan.setHeight(180); System.out.println("子类对象的实例变量height的值是:"+zhangSan.getHeight()); } }
运行结果如下:
子类对象未继承的averageHeight的值是:168 子类对象的实例变量height的值是:180
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程