码迷,mamicode.com
首页 > 其他好文 > 详细

关于继承概念的举例说明

时间:2018-10-24 15:25:29      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:重写   name   举例   erro   简单的   一般来说   super   现在   答案   

看到网上有人问一个关于继承问题:

刚学到继承这里,被super难住了。
在网上查资料,super代表父类对象的引用,但是 子类生成对象时 只是调用了父类的构造方法,并未生成父类对象,那么此时
super为什么能调用父类的方法,设定改方法被子类重写。
super既然调用了父类的方法,说明super就是父类对象的引用,但是又没生成父类的对象,那么此时super是怎么调用父类方法的?希望大家帮我分析下这个问题,谢谢。

以下是我的回答:

假设你是一个设计房子图纸的人。

你原本设计的房子(房子设计1)只有一个房间(房间1),
后来,你又在房子设计1的基础上设计了“房子设计2”
除了房间1,你又另设计了一个房间(房间2),
于是现在这个房子设计2有两个房间了。
(但房子设计2图纸中只说明房间1的设计请参考房子设计1图纸,没有在房子设计2图纸中体现)

现在,你将房子设计2图纸交给×××开发商,
×××开发商依房子设计2图纸盖了一个房子(对象实例)。

上面的文字用代码来表现是类似这样子的:

class HouseDesign1 {
private Room1 room1 = new Room1();
protected void enterRoom1(){}
}

class HouseDesign2 extend HouseDesign1 {
private Room2 room2 = new Room2();
protected void enterRoom2(){}
}

HouseDesign2 house = new HouseDesign2();

这样,就有了house对象实例。

一般来说,在软件领域,所谓对象实例是由new ClassName()或Class.newInstance()出来的,
因此LZ问的到底有没有生成父类对象,
就要看上面的例子中有没有new HouseDesign1()?

我想答案很明显了吧,没有!
虽然house中既有room2也有room1,
但都是HouseDesign2的对象实例,
没有HouseDesign1的对象实例。

LZ的问题“没生成父类的对象,那么此时super是怎么调用父类方法的?”
简单的说就是,子类实例中已包含了父类的一切(即room1)。
在house,room1是子类(HouseDesign2)实例中的(虽然是在父类图纸中设计的)。

关于继承概念的举例说明

标签:重写   name   举例   erro   简单的   一般来说   super   现在   答案   

原文地址:http://blog.51cto.com/oldycat/2308190

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!