- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5.Java面向对象程序设计第八讲
5.2 类的继承(inheritance);在Java,只允许单继承。所谓单继承是指每个类只有一个父类,不允许有多个父类。一个类允许同时拥有多个子类,这时这个父类实际上是所有子类的公共成员变量和公共方法成员的集合,而每一个子类则是父类的特殊化,是对公共成员变量和方法成员的功能、内涵方面的扩展和延伸。Java的多继承可通过接口来实现。
类继承不改变成员的访问权限,父类中的成员为公有的或被保护的,则其子类的成员访问权限也继承为公有的或被保护的。;5.2.1 类继承的实现
继承是通过extends关键字来实现的,在定义新类时使用extends关键字指明新类的父类,就在两个类之间建立了继承关系。
1.定义子类
前面其类头分别为:
public class HelloApplet extends Applet{......}
class MyException extends Exception {......}
一般地,在类声明中,加入extends子句来创建一个类的子类。extends后即为父类名,若父类名又是某个类的子类,则定义的类也是该类的(间接)子类。若无extends子句,则该类为java.lang.Object的子类。;2.类继承的传递性
类继承具有传递性,即子类继承父类的所有非私有成员,也继承父类的父类直至祖先所有的所有非私有成员。
3.类的成员覆盖
在类的继承中,若子类(派生类)新增的成员名称与父类(超类)成员相同,则称为成员覆盖(overriding)。
在子类中定义与父类同名成员的目的是修改父类的属性和行为。 ;(1)成员变量的覆盖
若子类声明了与父类同名的变量,则父类的变量被隐藏起来,直接使用的是子类的变量,但父类的变量仍占据空间,可通过super或父类名来访问。
【例5.14】在子类中定义了与父类同名的变量,从而隐藏了父类成员变量,这种隐藏变量可加super前缀来访问。
class A{
int x = 100;
} ; class B extends A{
int x = 200;
void print(){
System.out.println(Subclass : + x);
System.out.println(Superclass : + super.x);
}
public static void main(String args[]){
(new B()).print();
}
}
程序运行结果如下:
Subclass : 200
Superclass : 100;(2)成员方法覆盖
方法成员的覆盖与成员变量的隐藏的不同之处在于:子类隐藏父类的成员变量只是使得它不可见,父类的同名成员变量在子类对象中仍然占据自己的存储空间;
而子类成员方法对父类同名方法的覆盖将清除父类方法占用的内存空间,从而使得父类的方法在子类对象中不复存在。;方法的覆盖中需注意的是:子类在重新定义父类已有的方法时,应保持与父类完全相同的方法头声明,即应与父类有完全相同的方法名、返回值和参数列表。否则就不是方法的覆盖。而是在子类定义自己的与父类无关的成员方法,父类的方法未被覆盖,所以仍然存在。
下述规则适用于覆盖方法:
覆盖方法的返回类型必须与它所覆盖的方法相同。
覆盖方法不能比它所覆盖的方法访问性差。
覆盖方法不能比它所覆盖的方法抛出更多的异常。;4.派生类的初始化
在创建派生类的对象时,使用派生类的构造方法对其初始化,不但要对自身的成员变量赋初值,还要对父类的的成员变量赋初值。因为成员变量赋初值通常在构造方法中完成,因此在Java语言中,允许派生类继承父类的构造方法。构造方法的继承遵循如下的原则:
(1)若父类是无参数的构造方法,则子类无条件的继承该构造方法。
(2)若子类无自己的构造方法,则它将继承父类的无参构造方法作为自己的构造方法;若子类有自己的构造方法,则在创建子类对象时,它将先执行继承自父类的无参构造方法,然后再执行自己的构造方法。;(3)若父类是有参数的构造方法,子类可以通过在自己的构造方法中使用super关键字来调用它,但这个调用语句必须是子类构造方法的第一个可执行语句。
【例5.15】继承例5.6中的类RectConstructor时对父类的成员变量赋初值。
class Cube extends RectConstructor{
double height;
Cube(doubl
您可能关注的文档
最近下载
- DB5301_T 90-2023 工程建设项目联合测绘 技术规范.pdf VIP
- 2023年湖南岳阳市第一中学高一上入学考试数学模拟试卷附答案解析.pdf VIP
- 建立良好师生关系促进教育教学.pptx
- 2025年辅警招聘考试公安基础知识(情景分析题)模拟试卷3(题后含答案及解析.pdf VIP
- 中建一局首都体育学院项目临电方案(终)(28P)2.pdf VIP
- 无领导小组讨论几个派别、无领导小组讨论角色、无领导小组讨论面试十大精准切点、无领导小组讨论答题技巧、无领导小组讨论的加分项.docx VIP
- 《无人机基础》课件.pptx VIP
- 工程增项申请表格.docx VIP
- 2021利达JB-QG-LD988EL JB-QT-LD988EL 火灾报警控制器 消防联动控制器调试手册.docx VIP
- 实验动物学发展的趋势.ppt VIP
文档评论(0)