第6课-类继承.docVIP

  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文档。上传文档
查看更多
第六章、类的继承 继承的思想与实现 继承的思想与实现 继承(inheritance)从原有的类中派生出新的类型,加入新的代码,但是并不会对原有的类产生任何的影响。简单地说就是一个类拥有另一个类的所有属性和方法,那么这两个类就之间的关系就是继承关系。被继承的类成为父类或超类,继承的类叫子类。这里涉及到的大部分工作都是由编译器完成。 Java里的继承和C++里的继承是不同的,C++是允许多继承的,即一个儿子可以有多个父亲,即同时继承多个父类的属性和方法,那么这就是说,如果一个系统过于复杂的话,对象之间的关系可能是一种及其复杂的网状结构,你很难断定你所编辑的子类的一些属性和方法是来自于哪个父类,所以维护和使用起来难度将会大大增加。但是Java在这一点上就简化了,Java仅仅允许单继承,也就是说一个子类只能有一个父类,但是一个父类还是可以有多个子类,就是依靠这种唯一性,可以很方便地维护一个类的继承系统。 那么继承能够为我们带来什么好处呢?继承其实是抽象的逆过程,我们在分析系统时往往要对纷繁复杂的对象系统进行分析和抽象,要尽量找出不同对象的相同点,从而最大限度的减少类的数目,如果一个系统的类过多,而且类之间有很多的冗余,这说明这个系统的抽象工作做的并不好。举个例子:现在有人、猴子、猩猩三中对象类型,有两种抽象,一种抽象是为每一个具体对象构建一个具体的类别,如人类、猴子类、猩猩类;还有一种抽象有四个类,一个父类:龄长类,三个子类:人类、猴子类、猩猩类。从表面上看,第二种抽象好像比第一种抽象更麻烦,构造的类也就更多。但是实际的效果却是第二种抽象更加合适一些,假如没有将龄长类抽象出来的话,那么人类、猴子类及猩猩类的所有共同点,无论是体形、行为都必须在每个类中重复,我们知道他们的相同点一定大于不同点,如果我们分别来描述各个类型,会发现这些类之间有非常多的重复的东西。而如果将龄长类抽象出来,其实猴子、猩猩以及人区别于龄长类的特点并不是很多,所以分别描述起来就非常方便。尤其在子类中描述的是区别,而共同点在父类中都已经描述过了。 但是抽象只是为了更加方便的组织类的层次结构,而真正描述系统还是靠的是实实在在具体的对象,这些对象又是从抽象的最底层的具体类实例化过来的,我们都知道抽象最底层的类是通过层层继承出来的,所以抽象是设计过程中的,而继承是在实现过程中的。没有抽象-继承的过程,描述系统就是“就事论事”的过程,而这种过程被认为是不可取的。 对于继承,也有标准的画法,一个从子类指向父类的箭头表明一个继承关系,如下图5-1所示: 在Java语言中,继承的保留字为extends,如上例所示,继承的语句应该写成如下形式:class 猴子 extends 龄长类{……}、class 猩猩 extends 龄长类{……}、class 人 extends 龄长类{……}。 属性的继承与方法的继承 我们知道如果一个类是从另一个类中继承而来,那么其父类的某些属性和方法能够被子类继承,下面我们先来讨论类属性的继承问题。 属性的继承 【例程6.2.1】 ——文件FieldExtend.java—— /*************************************************************************************************** * Java编程思想第6章教学例程,关于类的属性的继承问题(2001/09/26) * @author 许炜 * @version 1.0 * @since jdk1.3 ***************************************************************************************************/ class Father{ private int a=1; int b=2; protected int c=3; public int d =4; } public class FieldExtend extends Father{ /*** 主控方法 * @param 命令行参数入口(程序中未用到) * @return void */ public static void main( String[] args ) { FieldExtend son = new FieldExtend(); Father fa = new Father(); fa.b=100; son.b=200; //System.out.println(子类私有成员a= + son.a); System.out.println(子类友好成员b= + son.b);

文档评论(0)

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

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档