JAVA 子类与对象的特点

子类与对象的特点

    当用子类的构造方法创建一个子类的对象时,不仅子类中声明的成员变量被分配了内存,而且父类的成员变量也都分配了内存空间,但只将其中一部分,即子类继承的那部分成员变量,作为分配给子类对象的变量。也就是说,父类中的private成员变量尽管分配了内存空间,也不作为子类对象的变量,即子类不继承父类的私有成员变量。同样,如果子类和父类不在同包中,尽管父类的友好成员变量分配了内存空间,但台不作为子类对象的变量,即如果子类和父类不在同一包中,子类不继承父类的友好成员变量。

    通过上面的讨论,我们有这样的感觉:子类创建对象时似乎浪费了一些内存,因为当用子类创建对象时,父类的成员变量也都分配了内存空间,但只将其中一部分作为分配给子类对象的变量。例如,父类中的private成员变量尽管分配了内存空间,也不作为子类对象的变量,当然它们也不是父类某个对象的变量,因为我们根本就没有使用父类创建任何对象,这部分内存似乎成了垃圾一样。但是,实际情况井非如此,我们需注意到,子类中还有一部分方法是从父类继承的,这部分方法却可以操作这部分未继承的变量。

  下面的例子中,子类ChinaPeople的对象调用继承的方法操作未被子类继承却分配了内存空间的变量。

class People {
	private int averHeight=166;
	public int getAverHeight() {
		return averHeight;
	}
}
class ChinaPeople extends People{
	int height;
	public void setHeight(int h) {
		//hetght=h+averHeight;        //非法,子类没有继承averHeight
		height=h;
	}
	public int getHeight() {
	return height;
	}
}
 public class Hello{
	 public static void main(String args[]) {
		 ChinaPeople zhangSan=new ChinaPeople();
		 System.out.println("子类对象未继承的averHeight的值是:"+zhangSan.getAverHeight());
		 zhangSan.setHeight(178);
		 System.out.println("子类对象的实例变量height的值是:"+zhangSan.getHeight());
	 }
 }

猜你喜欢

转载自blog.csdn.net/abc1498880402/article/details/80494783