继承与多态性-JAVA程序设计课件

上传人:des****85 文档编号:324052712 上传时间:2022-07-12 格式:PPT 页数:70 大小:540KB
返回 下载 相关 举报
继承与多态性-JAVA程序设计课件_第1页
第1页 / 共70页
继承与多态性-JAVA程序设计课件_第2页
第2页 / 共70页
继承与多态性-JAVA程序设计课件_第3页
第3页 / 共70页
继承与多态性-JAVA程序设计课件_第4页
第4页 / 共70页
继承与多态性-JAVA程序设计课件_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《继承与多态性-JAVA程序设计课件》由会员分享,可在线阅读,更多相关《继承与多态性-JAVA程序设计课件(70页珍藏版)》请在金锄头文库上搜索。

1、第4章继承与多态性4.1继承的基本概念顾名思义,继承就是子将父的东西承接过来。图4-1 动物类别之间的继承【提提示示】继承需要符合IS-A(是一种)关系,也就是子类是父类的一种,如老虎是食肉动物的一种。Java继承的特点1)继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和

2、数据的冗余度,大大增加程序的重用性。4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。4.2Java继承的实现4.2.1继承的语法在Java中使用extends关键字实现继承关系,格式如下:访问控制方式classextends./成员定义4.2.1继承的语法【实例实例4-1】继承的使用继承的使用classPersonprivateStringname;/姓名privateintage;/年龄publicStringgetName()returnname;publicvoidsetName(Stringname)this.name=name;publicintgetAge

3、()returnage;publicvoidsetAge(intage)this.age=age;classStudentextendsPersonprivateStringschool;/学校privateintgrade;/年级publicStringgetSchool()returnschool;publicvoidsetSchool(Stringschool)this.school=school;publicintgetGrade()returngrade;publicvoidsetGrade(intgrade)this.grade=grade;4.2.1继承的语法publicclas

4、sInheritDemopublicstaticvoidmain(Stringargs)Studentstu=newStudent();/新建学生对象stu.setName(张三);/访问从父类继承的方法stu.setAge(20);/访问从父类继承的方法stu.setSchool(哈佛大学);/访问本类定义的方法stu.setGrade(2);/访问本类定义的方法System.out.println(姓名:+stu.getName()+,年龄:+stu.getAge()+学校:+stu.getSchool()+,年级:+stu.getGrade();4.2.1继承的语法4.2.2protec

5、ted访问控制方式父类和子类是一般类和特殊类关系,子类是需要扩展父类的功能的,在扩展父类的功能时,可能会需要使用到从父类继承的私有成员,但父类的私有成员,在子类中不能直接访问。为此,Java提供了protected访问控制方式来解决这个问题。protected访问控制方式介于private和public之间,用用protected修饰的类里修饰的类里的成员,向所有子类和同一个包的其它类开放其的成员,向所有子类和同一个包的其它类开放其访问权限。访问权限。4.2.3super关键字与子类对象实例化过程子类对象实例中这些继承下来的非静态数据成员所占用的内存区域为子类对象实例中的父类子对象。注意父类子

6、对象本身相当于一个父类对象实例。Java语言的每一语言的每一个对象实例也有一个特殊的私有数据成员,个对象实例也有一个特殊的私有数据成员,称为称为super,用来引用该父类子对象。,用来引用该父类子对象。super也是一个引用变量,其类型则是它所属的对象实例的父类类型。4.2.3super关键字与子类对象实例化过程【实例实例4-2】子类对象实例化classPersonpublicPerson()System.out.println(我是Person类的构造方法);classStudentextendsPersonpublicStudent()System.out.println(我是Studen

7、t类的构造方法);publicclassSuperDemo1publicstaticvoidmain(Stringargs)Studentstu=newStudent();/新建学生对象图4-5 运行结果4.2.3super关键字与子类对象实例化过程【实例实例4-3】super关键字classPersonprivateStringname;/姓名privateintage;/年龄publicPerson(Stringname,intage)this.name=name;this.age=age;publicStringgetName()returnname;publicintgetAge()r

8、eturnage;4.2.3super关键字与子类对象实例化过程classStudentextendsPersonprivateStringschool;/学校privateintgrade;/年级publicStudent(Stringname,intage,Stringschool,intgrade)super(name,age);/调用父类构造方法,初始化从父类继承的对象属性this.school=school;this.grade=grade;publicStringgetSchool()returnschool;publicintgetGrade()returngrade;4.2.3

9、super关键字与子类对象实例化过程publicclassSuperDemo2publicstaticvoidmain(Stringargs)Studentstu=newStudent(张三,20,哈佛大学,2);/新建学生对象System.out.println(姓名:+stu.getName()+,年龄:+stu.getAge()+学校:“+stu.getSchool()+,年级:+stu.getGrade();4.2.4方法重写(Override)方法重写也称为方法覆盖或方法重定义方法重写也称为方法覆盖或方法重定义classVehiclepublicvoidrun()System.out

10、.println(交通工具在跑!);classTruckextendsVehicleOverride/表示方法重写的Java注解publicvoidrun()System.out.println(货车在地上跑!);classAirplaneextendsVehicleOverride/表示方法重写的Java注解publicvoidrun()System.out.println(飞机在天上飞!);4.2.5final关键字final在Java中表示最终的意思,使用final可以声明类、属性和方法:1)使用final可以声明常量,常量不能修改,定义时要赋初值;例如:finalintNUM=0;2)

11、使用final声明的方法不能被子类重写;3)使用final声明的类不能有子类。4.3继承与子类型类A继承类B,则类型A是类型B的子类型。Java语言允许祖先类类型的引用变量指向后代类语言允许祖先类类型的引用变量指向后代类类型的对象。类型的对象。例如,类GraduateStudent是类Student的子类,下述语句是合法的:Students=newGraduateStudent();类似的如果一个方法的形参是超类类型,那么方法调用时可以传给它一个子类对象作为实参,例如对于一个方法voidf(Studentd);可以这样来调用它:GraduateStudents=newGraduateStude

12、nt();f(s);/子类对象作为实参4.4抽象类与多态性4.4.1抽象类的引入抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。4.4.2抽象方法在抽象类中创建的没有具体实现的,必须要子类重写的方法称为抽象方法。抽象方法用关键字abstract进行修饰,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。声明一个抽象方法的基本格式如下:abstract(参数列表);例如:abstractvoidf();4.4.3抽象类的定义【实例实例4-4】如何定义抽象类及抽象方法示例a

13、bstractclassFruit/定义抽象类publicStringcolor;/定义颜色成员变量publicFruit()/定义构造方法color=绿色;/对变量color进行初始化publicabstractvoidharvest();/定义抽象方法classAppleextendsFruitpublicvoidharvest()System.out.println(苹果已经收获!);4.4.3抽象类的定义classOrangeextendsFruitpublicvoidharvest()System.out.println(桔子已经收获!);publicclassAbstractCla

14、ssDemopublicstaticvoidmain(Stringargs)Fruitf1=newApple();/父类引用指向子类对象f1.harvest();/通过父类引用调用子类对象的重写方法f1=newOrange();f1.harvest();4.4.4多态性(Polymorphism)“Polymorphism(多态)”一词来自希腊语,意为“多种形式”。指的是一个程序中同名的不同方法共存的情况。多态有编译时(静态)多态和运行时(动态)多态。编译时多态是通过方法重载实现的;运行时多态是通过方法覆盖实现(子类覆盖父类方法)的。4.4.4多态性(Polymorphism)【实例实例4-5

15、】一个经典的抽象图形类和它的具体子类的例子一个经典的抽象图形类和它的具体子类的例子程序程序4-5ShapeDemo.javaimportjava.util.*;abstractclassShape/Shape类是几个具体图形类的抽象父类publicabstractvoiddraw();/定义抽象方法classRectangleextendsShape/Rectangle类是Shape类的一个具体子类Override/表示方法重写的Java注解publicvoiddraw()System.out.println(画矩形);4.4.4多态性(Polymorphism)classCircleexte

16、ndsShape/Circle类也是Shape类的一个具体子类Overridepublicvoiddraw()System.out.println(画圆);classTriangleextendsShape/Triangle类是Shape类的一个具体子类Overridepublicvoiddraw()System.out.println(画三角形);4.4.4多态性(Polymorphism)/ShapeDemo类中随机生成矩形、圆、三角形,然后用Shape类型的引用调用publicclassShapeDemoRandomrand=newRandom();/创建一个随机数类,具体使用可参看Java帮助文档publicShapecreateShape()intc=rand.nextInt(3);/产生0-2之间的随机整数Shapes=null;switch(c)/根据产生的随机整数创建对象case0:s=newRectangle();break;case1:s=newCircle();break;case2:s=newTriangle();break;returns;4.4.4多态性(P

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号