Java网络程序设计 课件 单元4-07 继承_第1页
Java网络程序设计 课件 单元4-07 继承_第2页
Java网络程序设计 课件 单元4-07 继承_第3页
Java网络程序设计 课件 单元4-07 继承_第4页
Java网络程序设计 课件 单元4-07 继承_第5页
已阅读5页,还剩8页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

类与对象应用单元四类和对象概述Java类构造方法目录CONTENTS123对象初始化过程重载45继承多态

78抽象和封装

6抽象类接口

1011包和访问控制

9目录CONTENTS4.7.1继承的概念在前面的课程中,根据《租车系统》的需求抽象出了Car类和Truck类,在这两个类中有许多相同的属性和方法,例如name、oil、loss属性以及相应的getter方法,还有addOil()和drive()方法。这样做有两个问题,一是代码大量重复,二是如果要修改,两个类都要修改,会很麻烦,而且容易忘记修改部分内容。Java继承是使用己存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的属性或新的方法,也可以用已存在的类的属性和方法。这种技术能够非常容易地复用以前的代码,大大缩短开发周期,降低开发费用。4.7.1继承的概念继承的语法形式如下:classAextendsB{类定义部分}即A类继承B类,B类称为父类、超类或基类,A类称为子类、衍生类或导出类。4.7.2继承的使用了解Java继承的概念后,接下来使用继承来解决Car类和Truck类重复代码的问题。作为程序设计人员,可以将Car类和Truck类重复的代码挑出来,提取到一个单独的Vehicle类中,然后让Car类和Truck类继承Vehicle类,这样可以在保留Vehicle类的属性和方法的同时,增加不同的属性和方法。可得继承的类图:根据图可编写Vehicle类,Car类和Truck类。4.7.3继承的访问权限继承最大的好处是,子类可以从父类中继承属性和方法,那么子类是不是能继承父类所有的属性和方法呢?具体情况说明如下。●

子类可以继承父类中访问权限修饰符为public和protected的属性和方法。●

子类可以继承父类中用默认访问权限修饰的属性和方法,但子类和父类必须在同一个包中。●

子类无法继承父类中访问权限修饰符为private的属性和方法。●

子类无法继承父类的构造方法。4.7.4方法的重写子类可以从父类继承相应访问权限的方法,但如果父类的方法不能满足子类的需要,则可以在子类中对父类的同名方法进行覆盖,这就是重写。假设《租车系统》中,系统的需求发生了如下变化:卡车每行驶1次,耗油从5升提升为10升,增加车损度10,如果油量低于15升,则不允许行驶,直接在控制台输出“油量不足15升,需要加油!”在此情况下可以通过重写解决。4.7.4方法的重写在Truck类中添加如下的代码,重写父类的drive()方法。//子类重写父类的drive()方法publicvoiddrive(){if(oil<15){System.out.println("油量不足15升,需要加油!");}else{System.out.println("正在行驶!");oil=oil-10;loss=loss+10;}}4.7.4方法的重写重写需要满足的条件●重写方法与被重写方法同名,参数列表也必须相同。●重写方法的返回值类型必须和被重写方法的返回值类型相同或是其子类。●重写方法不能缩小被重写方法的访问权限。4.7.5属性的覆盖创建父类对象,实现的时候用子类实现,此时这个对象的属性为父类的属性,不被子类覆盖。父类的方法被子类覆盖,调用了子类重写的方法,显示出“子类方法”。publicclassSubextendsSuper{publicinti=100; //子类同名属性i,赋值100publicstaticvoidmain(String[]args){Supersup=newSub(); //创建父类对象,用子类实现System.out.println(sup.i);//输出sup的i属性}}classSuper{publicinti=50; //父类属性i,赋值50}publicclassSubextendsSuper{publicinti=100;publicvoidshow() //子类方法重写,显示“子类方法”{System.out.println("子类方法");}publicstaticvoidmain(String[]args){Supersup=newSub(); //创建父类对象,用子类实现sup.show(); //调用的是子类方法,覆盖了父类方法System.out.println(sup.i);}}classSuper{publicinti=50;publicvoidshow() //父类方法,显示“父类方法”{System.out.println("父类方法");}}4.7.6继承中的初始化在第一次实例化子类时,先调用父类的静态块,再调用子类的静态块,之后再调用父类的非静态块和构造方法,再调用子类的非静态块和构造方法。注意,当第二次实例化子类时,父类和子类的静态块都不会再被调用,因为它们是静态块,属于类级别的,只会被调用一次。publicclassInitDemo{publicstaticvoidmain(String[]args){System.out.println("第一次实例化子类:");newSub();System.out.println("第二次实例化子类:");newSub();}}classSuper{static{System.out.println("显示:父类中的静态块!");}{System.out.println("显示:父类中的非静态块!");}Super(){System.out.println("显示:父类构造方法!");}}classSubextendsSuper{static{Syst

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论