第五讲面向对象程序设计方案思想——继承(修改).docVIP

第五讲面向对象程序设计方案思想——继承(修改).doc

  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文档。上传文档
查看更多
第五讲 面向对象程序设计思想(3) ——继承 引子 在评测成绩程序里,我们已经知道考试课类和考查课类都继承了课程类。“继承”的定义是:特殊类的对象拥有其一般类的全部属性与服务。在JAVA中,特殊类称作“子类”或“派生类”,一般类称作“超类”、 “基类”或者“父类”。例如鸽子是鸟的子类,因此所有“鸟”该有的特性,鸽子也都有。 5.1继承 如果树上停着一只鸽子、两只麻雀、三只乌鸦,我们问树上有几只鸟,大家会毫不犹豫地说六只。因为鸽子、麻雀、乌鸦都是鸟的子类,因此我们可以用“鸟”这个超类来统称它们,也就是超类的引用可以指向子类的对象。但反过来就不成立了,子类的引用不能指向超类的对象,毕竟鸟不是鸽子。由此,我们可以得到下面的结论: 1、子类对象可以被视作是其超类的一个对象; 2、超类对象不能被视作是其子类的一个对象; 3、超类的引用可以指向其子类的对象; 4、子类的引用不可以指向其超类的对象。 再进一步的考虑,如果上面的六只鸟都叫了起来,“叽叽”“咕咕”却并不相同。例如下面代码: 鸟 a = new 鸽子(); 鸟 b = new麻雀(); 鸟 c = new乌鸦(); a.叫(); b.叫(); c.叫(); 虽然都是叫,但各有不同。因为a、b、c所表示的对象分别是鸽子、麻雀和乌鸦它们虽同属于鸟类,但各自有各自的实现。 5.1.1继承的UML表示 继承是面向对象语言中特有的复用工具。子类通过继承可以获得超类的所有功能,然后更具自生的特点加以扩展和改造,就能以简单的程序代码来实现功能强大功能了。《荀子·劝学篇》中所说的“青出于蓝而胜于蓝”正好为我们解释了继承的意义。 在UML中,类的继承关系也称为泛化关系。泛化和继承表示的是同一种关系,只是方向不同。我们说“子类继承超类”或者说“超类泛化为子类”。在UML的类图中使用空心三角的箭头()表示继承,箭头指向超类。例如上文中鸟、鸽子、麻雀和乌鸦的类图如下: 5.1.2 JAVA中实现继承 JAVA中要实现继承,只要在子类的申明中使用“extends”关键字来注明其超类就可以了。例如: class 鸟 { void 叫(){} } class 鸽子 extends鸟 { void 叫(){} } 5.1.3子类调用父类的构造方法 父类的构造方法不能被子类继承。子类不能直接通过方法名调用父类的构造方法,而通过super调用,且位于子类构造方法的首行。 当子类的某个构造方法没有调用父类的一个构造方法,通过这个构造方法创建对象时,会自动调用父类的缺省构造方法。 例5.1 class GrandPa { //from protected GrandPa() { System.out.println(default GrandPa); } //to public GrandPa(String name) { System.out.println(name); } } class Father extends GrandPa { protected Father() { System.out.println(default Father); } public Father(String grandPaName,String fatherName) { super(grandPaName); System.out.println(fatherName); } } public class Son extends Father { public Son() { System.out.println(default Son); } public Son(String grandPaName,String fatherName,String sonName) { super(grandPaName,fatherName);//here System.out.println(sonName); } public static void main(String[] args) { Son s1=new Son(); Son s2=new Son(A,B,C); } } 输出结果 default GrandPa default Father default Son A B C 如果将from到to删除,则编译出错 如果将here行删除,则输出: default GrandPa default Father default Son default GrandPa default Father C 例5.2 class ClassA { public int varA=1; protected void methodA

文档评论(0)

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

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

1亿VIP精品文档

相关文档