继承与多态性-JAVA程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《继承与多态性-JAVA程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 继承 多态性 JAVA 程序设计 课件
- 资源描述:
-
1、第4章 继承与多态性 4.1 继承的基本概念 顾名思义,继承就是子将父的东西承接过来。动动物物食食草草动动物物食食肉肉动动物物牛牛马马狮狮子子老老虎虎图4-1 动物类别之间的继承【提示提示】继承需要符合IS-A(是一种)关系,也就是子类是父类的一种,如老虎是食肉动物的一种。Java继承的特点 1)继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与
2、基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。4.2 Java继承的实现 4.2.1 继承的语法 在Java中使用extends关键字实现继承关系,格式如下:访问控制方式 class extends ./成员定义4.2.1 继承的语法【实例实例4-1】继承的使用继承的使用class Personprivate String name;/姓名private int age;/年龄public String getName()return name;public
3、 void setName(String name)this.name=name;public int getAge()return age;public void setAge(int age)this.age=age;class Student extends Personprivate String school;/学校private int grade;/年级public String getSchool()return school;public void setSchool(String school)this.school=school;public int getGrade()
4、return grade;public void setGrade(int grade)this.grade=grade;4.2.1 继承的语法public class InheritDemo public static void main(String args)Student stu=new Student();/新建学生对象stu.setName(张三);/访问从父类继承的方法stu.setAge(20);/访问从父类继承的方法stu.setSchool(哈佛大学);/访问本类定义的方法stu.setGrade(2);/访问本类定义的方法 System.out.println(姓名:+s
5、tu.getName()+,年龄:+stu.getAge()+学校:+stu.getSchool()+,年级:+stu.getGrade();4.2.1 继承的语法4.2.2 protected访问控制方式 父类和子类是一般类和特殊类关系,子类是需要扩展父类的功能的,在扩展父类的功能时,可能会需要使用到从父类继承的私有成员,但父类的私有成员,在子类中不能直接访问。为此,Java提供了protected访问控制方式来解决这个问题。protected访问控制方式介于private和public之间,用用protected修饰的类里修饰的类里的成员,向所有子类和同一个包的其它类开放其的成员,向所有子
6、类和同一个包的其它类开放其访问权限。访问权限。4.2.3 super关键字与子类对象实例化过程 子类对象实例中这些继承下来的非静态数据成员所占用的内存区域为子类对象实例中的父类子对象。注意父类子对象本身相当于一个父类对象实例。Java 语言的每一语言的每一个对象实例也有一个特殊的私有数据成员,个对象实例也有一个特殊的私有数据成员,称为称为super,用来引用该父类子对象。,用来引用该父类子对象。super 也是一个引用变量,其类型则是它所属的对象实例的父类类型。4.2.3 super关键字与子类对象实例化过程【实例实例4-2】子类对象实例化class Personpublic Person()
7、System.out.println(我是Person类的构造方法);class Student extends Personpublic Student()System.out.println(我是Student类的构造方法);public class SuperDemo1 public static void main(String args)Student stu=new Student();/新建学生对象图4-5 运行结果4.2.3 super关键字与子类对象实例化过程【实例实例4-3】super关键字class Personprivate String name;/姓名private
8、 int age;/年龄public Person(String name,int age)this.name=name;this.age=age;public String getName()return name;public int getAge()return age;4.2.3 super关键字与子类对象实例化过程class Student extends Personprivate String school;/学校private int grade;/年级public Student(String name,int age,String school,int grade)supe
9、r(name,age);/调用父类构造方法,初始化从父类继承的对象属性this.school=school;this.grade=grade;public String getSchool()return school;public int getGrade()return grade;4.2.3 super关键字与子类对象实例化过程public class SuperDemo2 public static void main(String args)Student stu=new Student(张三,20,哈佛大学,2);/新建学生对象 System.out.println(姓名:+stu
10、.getName()+,年龄:+stu.getAge()+学校:“+stu.getSchool()+,年级:+stu.getGrade();4.2.4 方法重写(Override)方法重写也称为方法覆盖或方法重定义方法重写也称为方法覆盖或方法重定义 class Vehicle public void run()System.out.println(交通工具在跑!);class Truck extends Vehicle Override /表示方法重写的Java注解public void run()System.out.println(货车在地上跑!);class Airplane exten
11、ds Vehicle Override /表示方法重写的Java注解public void run()System.out.println(飞机在天上飞!);4.2.5 final关键字 final在Java中表示最终的意思,使用final可以声明类、属性和方法:1)使用final可以声明常量,常量不能修改,定义时要赋初值;例如:final int NUM=0;2)使用final声明的方法不能被子类重写;3)使用final声明的类不能有子类。4.3 继承与子类型 类A继承类B,则类型A是类型B的子类型。Java语言允许祖先类类型的引用变量指向后代类语言允许祖先类类型的引用变量指向后代类类型的对
12、象。类型的对象。例如,类GraduateStudent是类Student的子类,下述语句是合法的:Student s=new GraduateStudent();类似的如果一个方法的形参是超类类型,那么方法调用时可以传给它一个子类对象作为实参,例如对于一个方法void f(Student d);可以这样来调用它:GraduateStudent s=new GraduateStudent();f(s);/子类对象作为实参4.4 抽象类与多态性 4.4.1 抽象类的引入 抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。4.4.
13、2 抽象方法 在抽象类中创建的没有具体实现的,必须要子类重写的方法称为抽象方法。抽象方法用关键字abstract进行修饰,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。声明一个抽象方法的基本格式如下:abstract (参数列表);例如:abstract void f();4.4.3 抽象类的定义【实例实例4-4】如何定义抽象类及抽象方法示例abstract class Fruit /定义抽象类public String color;/定义颜色成员变量public Fruit()/定义构造方法color=绿色;/对变量color进行初始
14、化public abstract void harvest();/定义抽象方法class Apple extends Fruit public void harvest()System.out.println(苹果已经收获!);4.4.3 抽象类的定义class Orange extends Fruit public void harvest()System.out.println(桔子已经收获!);public class AbstractClassDemo public static void main(String args)Fruit f1=new Apple();/父类引用指向子类对
15、象f1.harvest();/通过父类引用调用子类对象的重写方法f1=new Orange();f1.harvest();4.4.4 多态性(Polymorphism)“Polymorphism(多态)”一词来自希腊语,意为“多种形式”。指的是一个程序中同名的不同方法共存的情况。多态有编译时(静态)多态和运行时(动态)多态。编译时多态是通过方法重载实现的;运行时多态是通过方法覆盖实现(子类覆盖父类方法)的。4.4.4 多态性(Polymorphism)【实例实例4-5】一个经典的抽象图形类和它的具体子类的例子一个经典的抽象图形类和它的具体子类的例子程序程序4-5 ShapeDemo.javai
展开阅读全文