package com.fushuang.test;
/**
* Created by fushuang on 2016/7/29.
*/
class Animal{
public int size=10;
}
class Dog extends Animal{
public String color="red";
public void say(){
System.out.println("汪汪~~");
}
}
public class Thing {
public static void main(String[] args) {
/*
将子类转化为父类的可以直接转化,不需要添加强转,父类只能触及到自己属性和方法的内存空间,
但是多余的内存空间不会被扔掉,而是被保存,当gongqun(由子类转化为的父类)再次被转换成子类的时候必须添加强转,但是此时
并不会报强转错误,因为gongqun一开始是有子类转化来的,内存中含有子类的空间只是没有被利用起来,这时强转过后,haoliang
将父类的内存范围扩充.
*/
Animal gongqun= new Dog();
Dog haoliang= (Dog) gongqun;
System.out.println(haoliang.size);
haoliang.say();
/*
下面代码报错,ClassCastException.原因是父类的对象直接强制转换给子类,而子类更加具体,并不能充分的被初始化
*/
Animal guoxiangyao = new Animal();
Dog gaoshiyuan= (Dog) guoxiangyao;
System.out.println(guoxiangyao.size);
gaoshiyuan.say();
}
}
父类子类相互转化的内存关系
最新推荐文章于 2019-09-03 16:57:48 发布