Dotcpp  >  编程教程  >  Java子类与继承  >  Java子类与对象

Java子类与对象

点击打开在线编译器,边学边练

当用子类的构造方法创建一个子类的对象时,不仅子类中声明的成员变量被分配了内存,而且父类的成员变量也都分配了内存空间,但只将子类继承的那部分成员变量作为分配给子类对象的变量。


也就是说,父类中的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



本文固定URL:https://www.dotcpp.com/course/760

Java教程
第一章 Java入门
第二章 Java运算符和表达式
第三章 Java流程控制
第四章 Java类和对象
第五章 Java子类与继承
第六章 Java接口与实现
第七章 Java内部类与异常类
第八章 Java常用实用类
第九章 Java输入输出流
第十章 Java数组
Dotcpp在线编译      (登录可减少运行等待时间)