- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第4章继承与接口
4.1子类与父类
4.2子类对象的构造过程
4.3成员变量隐藏与方法覆盖
4.4super关键字
4.5上转型对象
4.6抽象类
4.7接口
4.8接口的回调
4.1子 类 与 父 类
在Java中,某个类可以从其他类中扩展出来,这种从另
一个类中派生出来的类称之为子类。而被子类所派生的类称之
为超类或父类。继承是一种从已有的类中创建新类的机制。利
用继承,可以先创建一个包含有公共属性的抽象一般类,然后
再在这个抽象一般类的基础上创建具有某些特殊属性的子类。
子类继承了一般类的状态和行为,然后再根据需要增加它自己
新的状态和行为。
在Java中,除了所有类的公共父类Object以外,其他的类
都有且只有一个直接的父类。这是因为Java是一种支持单继承
的语言,在Java中,一个类不能拥有两个或两个以上的直接父
类。在没有任何其他显式声明的直接父类的情况下,一个类被
默认为是Object类的子类。一个类的父类可以从另一个类中派
生出来,正如同人类的族谱一样。如果我们追寻一个类的继承
结构,可以一直追寻这个类的父亲,父亲的父亲,也即这个类
的祖父……一直延伸下去,最终我们会发现继承的链条会一直
延伸到所有类的公共父类Object。
无论子类位于哪个包中,都将会继承其父类的所有public
和protected的成员变量和成员方法。而如果子类和父类位于同
一个包,它还会继承父类的友好成员变量和友好成员方法。值
得注意的是,子类是不能继承父类的初始化方法的。关于初始
化方法在类继承中如何使用,我们将在后续章节中讨论。
在类的声明中,使用关键字extends来声明一个类是另外
一个类的子类,例如:
classSonextendsFather{
…
}
声明了类Son是Father类的子类。如果一个类的声明中没
有使用关键字extends,这个类将会被默认是所有类的公共父
类Object的子类。
【例4-1】类继承的例子。在这个例子里面,类Son是类
Father的子类,而类GrandSon是类Son的子类。Father类中的成
员变量house_1_area记录了父亲拥有的房子的面积;Son类中
的成员变量house_2_area记录了儿子拥有的房子的面积;
Grandson类中的成员变量house_3_area记录了孙子拥有的房子
的面积。
在测试类ExtendTest中,我们新建了一个GrandSon类的实
例gs,通过gs,我们分别调用了属于父亲的print_house_1_area
方法、属于儿子的print_house_2_area方法以及属于孙子他自己
的print_house_3_area方法,把祖孙三代的屋子的面积都打印了
出来。注意GrandSon类中只声明了print_house_3_area方法,其
余两个方法都是从Father类和Son类那里继承下来的。在这个
例子中我们用了另外一个关键字super,关于super我们将在后
续章节加以说明。
程序运行结果如图4.1所示。
图4.1例4-1的运行结果
4.2子类对象的构造过程
在例4-1中,我们看到子类GrandSon的对象实例不仅拥有
他自己的成员变量house_3_area,也继承了直接父类Son和祖
先类Father的成员变量house_2_area和house_1_area。那么这些
成员变量所拥有的内存空间是如何分配的呢?当用子类的初始
化方法创建一个子类的实例对象时,这个子类声明的所有成员
变量都被分配了内存空间,它的直接父类和所有的祖先类的成
员变量也都被分配了内存空间。
但是正如我们前面所提到的,即使在同一个包中,子类也
不能继承父类对象中那些私有的成员变量和成员方法。那么是
否意味着一个子类的直接父类和所有的祖先类中的私有成员变
量,虽然被分配了内存空间,但是子类却无法使用它们呢?实
际情况并非如此。尽管子类实例对象无法使用那些父类中的私
有成员变量,但是它却可以通过调用从父类继承下来的方法,
间接访问那些父类中的私有成员变量。
【例4-2】在这个例子中,子类通过调用它从父类继承下
来的方法,操作父类中未被子类继承却被分配了内存空间的私
有成员变量。
classFather{
privateinthouse_1_area;
publicFather(inth1a){
house_1_area=h1a;
}
您可能关注的文档
最近下载
- 腹透腹膜炎的护理.pptx VIP
- 肌电图设备可行性报告.docx
- 网络短剧推广方案策划.pptx VIP
- 2020年中央空调市场报告-艾肯网.pdf VIP
- 人工智能赋能中学化学教学的探索.pptx VIP
- 高中化学新人教版必修一离子方程式正误判断及离子共存课件.ppt VIP
- 解放上海红色戏剧小品《我记得你,你就活着》台词剧本手稿.doc VIP
- 生成式人工智能应用实战课件 第7章 AIGC信息获取与数据分析.pptx VIP
- 2024—2025学年河南省开封高级中学高一上学期第一次月考物理试卷.doc VIP
- 2025下半年全国房地产经纪人考试(房地产交易制度政策)综合试题及答案.docx VIP
文档评论(0)