阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

继承中的构造方法内存处理

87次阅读
没有评论

共计 1336 个字符,预计需要花费 4 分钟才能阅读完成。

1、继承关系内存解释

实际上在面向对象第一天的讲解当中,我们对内存方面做了一些隐瞒。因为除了 Object 类,所有的类都是有父类的。但是我们在考虑内存图时忽略了这点,现在,我们来简单描述加入了子父类关系后的对象内存图。

1.1、案例

// 定义父类 class Person {private String name; private int age; public Person(){} public Person(String name,int age) {this.name = name; this.age = age; } //get/set 方法 } // 定义子类 class Chinese extends Person{private String address; public Chinese(){} public Chinese(String name,int age,String address) {super(name,age); this.address = address; } // 对 address 的 get/set }
// 定义测试类, 使用子类创建对象 public class TestDemo{public static void main(String args[]){Chinese c = new Chinese("AngelaBaby",18,"北京海淀区上地 7 街晋福公寓"); } }

1.2、内存图

继承中的构造方法内存处理

2、向上转型与向下转型内存解释

2.1、向上转型

当出现多态时,引用为 Person 类型,对象为 Chinese 对象,此时,由于 Chinese 中包含了父类所有成员,所以可以访问父类非私有的一切。对外表现的就”像个父类对象一样”。

仅仅在调用方法时,会调用子类重写后的方法。

Person p=new Chinese();

2.2、向下转型

当出现多态后,父类 Person 引用指向子类对象,当强转为子类引用时,由于堆内存当中存储的仍为子类对象,包含子类的一切成员。所以可以转型成功。

但是,如果没有出现多态,仅仅创建父类对象 (如果父类不是抽象类的话),则为父类 Person 的引用指向 Person 的对象,没有子类的对象。此时如果强转为子类对象,则不包含子类的一些属性与功能,所以强转失败。

// 父类对象强转子类对象 Person p=new Chinese(); Chinese c=(Chinese)p;
// 父类对象强转子类对象 Person p=new Person(); Chinese c=(Chinese)p;

2.3、案例

class Fu {String name = "父类名字"; } class Zi extends Fu {String name = "子类名字"; public void method(){String name = "局部名字"; System.out.println(name); System.out.println(this.name); System.out.println(super.name); } } public class FuTest{public static void main(String[] args) {Fu fu = new Zi(); System.out.println(fu.name); Zi zi = (Zi)fu; System.out.println(zi.name); } }

运行结果:

继承中的构造方法内存处理

2.4、内存图

继承中的构造方法内存处理

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-06-06发表,共计1336字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中