《JAVA语言程序设计教程》课件第4章.pptVIP

《JAVA语言程序设计教程》课件第4章.ppt

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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;

}

文档评论(0)

kd8w + 关注
实名认证
文档贡献者

kd8w

1亿VIP精品文档

相关文档