关于继承概念的举例说明

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于继承概念的举例说明相关的知识,希望对你有一定的参考价值。

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

刚学到继承这里,被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)实例中的(虽然是在父类图纸中设计的)。

以上是关于关于继承概念的举例说明的主要内容,如果未能解决你的问题,请参考以下文章

c#中请说明类的三大特性,并举例说明类的继承和多态。

[react] 举例说明什么是高阶组件(HOC)的反向继承

javascript常见题目

[css] 请举例说明css有哪些不可继承的属性?

tp框架---View视图层---模板继承(举例说明)

java继承时能包括静态的变量和方法吗?举例说明!