类的封装继承和多态信息学院级.pptx

上传人:莉*** 文档编号:73439676 上传时间:2023-02-18 格式:PPTX 页数:98 大小:3.49MB
返回 下载 相关 举报
类的封装继承和多态信息学院级.pptx_第1页
第1页 / 共98页
类的封装继承和多态信息学院级.pptx_第2页
第2页 / 共98页
点击查看更多>>
资源描述

《类的封装继承和多态信息学院级.pptx》由会员分享,可在线阅读,更多相关《类的封装继承和多态信息学院级.pptx(98页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、面向过程和面向对象区别武汉理工大学信息学院Java程序设计实用教程(第4版)1面向过程中,数据和对数据的操作是分离的。这种机制限制的功能扩充,增加维护难度。面向对象将属性和行为封装在一起。第1页/共98页面向过程和面向对象思考问题方式差异示例面向过程和面向对象的区别示例(以去乌鲁木齐为例)面向过程我要决定乘哪种交通工具,如何换车,每趟车的时间是多少面向对象乘车人对象、交通工具对象(汽车、火车、飞机)、城市对象 武汉理工大学信息学院Java程序设计实用教程(第4版)2第2页/共98页3.1 类和对象武汉理工大学信息学院Java程序设计实用教程(第4版)3定义1.类类(class)是既包括数据又包

2、括作用于数据的一组操作的封装体。类中的数据称为成员变量,类中对数据的操作称为成员方法(method)。成员变量反映类的状态和特征,成员方法表示类的行为能力。不同的类具有不同的特征和功能。类具有封装性、继承性、多态性和抽象性。第3页/共98页武汉理工大学信息学院Java程序设计实用教程(第4版)4定义2.对象对象(object)是类的实例(instance)。对象与类的关系就像变量与数据类型的关系一样,例如,10是int类型的一个值,一个int变量i能够获得并保存10这个值。对象是动态的,每个对象都有自己的生存周期,都会经历一个从创建、运行到消亡的变 化过程。第4页/共98页类51.声明类类声明

3、 成员变量的声明;成员方法的声明及实现;类声明:修饰符 class 类 extends 父类 implements 接口列表成员变量属性成员方法行为第5页/共98页2.声明成员变量和成员方法6成员变量声明格式:修饰符 数据类型 变量=表达式,变量=表达式成员方法声明格式:修饰符 返回值类型 方法(参数列表)throws 异常类 语句序列;return 返回值;3.成员方法重载类中可以有多个同名的方法名,前提是参数列表不同第6页/共98页7对象1.声明对象类 对象2.创建实例对象=new 类的构造方法(参数列表)3.引用对象的成员变量和调用对象方法对象.成员变量对象.成员方法(参数列表)Java

4、语言自动释放对象。第7页/共98页类和对象的示例收银员对象顾客对象姓名:朱丽叶年龄:48体重:52千克操作:购买商品属性属性姓名:布兰尼职衔:收银员年龄:35体重:60千克操作:收款打印帐单行为行为武汉理工大学信息学院Java程序设计实用教程(第4版)8如何定义这个例子中的类?哪些是对象?第8页/共98页类和对象的区别 类是概念模型,定义对象的所 有特性和所需 的操作对象是真实的模型类和对象类和对象类定义实体模型对象是实际的实体类是对象的原型类是对象的原型类是对象的原型类是对象的原型所有属于同一个类所有属于同一个类所有属于同一个类所有属于同一个类的对象都具有相同的对象都具有相同的对象都具有相同

5、的对象都具有相同的特性和操作的特性和操作的特性和操作的特性和操作武汉理工大学信息学院Java程序设计实用教程(第4版)9第9页/共98页【例3.1】声明日期类及使用日期对象 public class MyDate /类声明/成员变量 int year,month,day;/成员变量,表示年、月、日 /成员方法 void set(int y,int m,int d)/成员方法,设置日期值 void set(MyDate d)/将当前对象值设置为参数值,重载 public String toString()/返回中文日期字符串 public static void main(String args

6、)MyDate d1=new MyDate();/声明对象、创建实例、引用赋值 d1.set(2009,7,16);/调用类的成员方法 MyDate d2=d1;/对象引用赋值 武汉理工大学信息学院Java程序设计实用教程(第4版)10第10页/共98页11武汉理工大学信息学院Java程序设计实用教程(第4版)4.对象的引用模型第11页/共98页12武汉理工大学信息学院Java程序设计实用教程(第4版)对象的关系运算与比较相等第12页/共98页133.2 类的封装性信息隐藏,隐藏对象的实现细节,不让用户看到将东西包装在一起,然后以新的完整形式呈现出来例如,两种或多种化学药品组成一个胶囊隐藏属性

7、、方法或实现细节的过程称为封装。是软件模块化的重要机制。武汉理工大学信息学院Java程序设计实用教程(第4版)封装包含了两层含义:将数据和对数据的操作组成起来构成类,变成一个不可分割的独立单元实现信息隐藏,类既要提供与外部联系的方法,又要尽可能地隐藏实现细节第13页/共98页封装的示例 3-1接口 采购经理罗杰斯先生法拉公司汽车元件制造商.迪斯尼汽车公司.市场经理雪莉女士 要求武汉理工大学信息学院Java程序设计实用教程(第4版)14第14页/共98页 封装的示例 3-2有选择地提供数据法拉公司迪斯尼汽车公司公共电话号码电子邮箱产品种类私有备件的制造方法备件库存备件的制造成本公共电话号码电子邮

8、箱汽车种类私有汽车的组装方法汽车库存汽车的组装成本武汉理工大学信息学院Java程序设计实用教程(第4版)15第15页/共98页封装的示例 3-3 实体法拉公司实体迪斯尼汽车公司Auti Ltd.Buto Ltd.属性电话号码电子邮箱产品种类现有存货数量雇员详情所需物料详情属性电话号码电子邮箱汽车种类汽车规格雇员详情库存详情经销商详情方法接收订单备件的制造方法计算备件的制造成本计算利润率方法发出订单汽车的组装方法计算汽车的组装成本计算工资发出订单编制必要报告武汉理工大学信息学院Java程序设计实用教程(第4版)16蓝色为公开变量和方法,红色为私有变量和方法第16页/共98页17武汉理工大学信息学

9、院Java程序设计实用教程(第4版)类的构造方法1.声明及调用构造方法public class MyDate public MyDate(int y,int m,int d)/声明构造方法 /构造方法与类同名,构造方法返回该类的一个实例 year=y;month=m;day=d;MyDate d=new MyDate(2009,7,18);2.默认构造方法public MyDate()构造方法用于创建一个类的实例并对实例的成员变量进行初始化。构造方法必须与类同名,没有返回值,且为public。第17页/共98页18武汉理工大学信息学院Java程序设计实用教程(第4版)3.拷贝构造方法publi

10、c MyDate(MyDate d)year=d.year;month=d.month;day=d.day;调用语句如下:MyDate d1=new MyDate(2009,7,16);MyDate d2=new MyDate(d1);第2句功能相当于以下两句:MyDate d2=new MyDate();d2.set(d1);类构造方法的参数是该类对象,则称为拷贝构造方法。MyDate d2=d1两条语句有何不同第18页/共98页19武汉理工大学信息学院Java程序设计实用教程(第4版)4.构造方法重载public MyDate(int y,int m,int d);public MyDat

11、e(MyDate d);public MyDate();构造方法使用注意:如果没有任何构造函数,可以直接使用new MyDate()初始化一个对象;系统会把基本数据类型变量初始化为0,引用数据类型变量初始化为NULL。如果类中声明了有参的构造函数,就不能用无参的默认构造方法初始化一个对象。第19页/共98页20武汉理工大学信息学院Java程序设计实用教程(第4版)对象的引用和运算this引用指代对象本身this访问本类的成员变量和成员方法this.成员变量this.成员方法(参数列表)调用本类重载的构造方法this(参数列表)逻辑运算符 =!=用于判断是否同一个实例,不支持重载instance

12、of对象运算符d instanceof MyDate 第20页/共98页this区分成员变量和局部变量public MyDate(int y,int m,int d)year=y;month=m;day=d;武汉理工大学信息学院Java程序设计实用教程(第4版)21当方法中的变量和类的成员变量同名时,必须用this来区分public MyDate(int year,int month,int day)this.year=year;this.month=month;this.day=day;类成员变量和方法变量同名,一定要使用this来区分。第21页/共98页22武汉理工大学信息学院Java程序

13、设计实用教程(第4版)访问控制类的访问 1.类的访问权限:只有public和缺省两种。public class MyDate;/能被同一项目中所有类访问class MyDate_ex;/只能被同一个包的类访问类声明:修饰符 class 类 extends 父类 implements 接口列表第22页/共98页类访问权限举例package chapter03.ClassAccess;public class ClassPubAccess package chapter03.ClassAccess;class ClassDefaultAccess package chapter03.ClassAc

14、cess;public class ClassAccessTest public static void main(String args)ClassPubAccess pubAccess=new ClassPubAccess();ClassDefaultAccess defaultAccess=new ClassDefaultAccess();武汉理工大学信息学院Java程序设计实用教程(第4版)23把这个文件移动到chapter03包中第23页/共98页2.类中成员的访问权限:有四种武汉理工大学信息学院Java程序设计实用教程(第4版)24访问控制类成员变量的访问 权限修饰符权限修饰符同一

15、类同一类同一包同一包不同包的子类不同包的子类所有类所有类public(公有公有)protected(保护保护)缺省缺省 private(私有私有)同一Project的前提下类中成员包括成员变量,也包括成员方法第24页/共98页25访问修饰符 3-2信息隐藏是封装性最重要的功能之一,也是使用访问修饰符的原因信息隐藏的原因包括:对任何实现细节所作的更改不会影响使用该类的代码防止用户意外删除数据 访问修饰符访问修饰符访问修饰符访问修饰符访问修饰符privateprotected默认public武汉理工大学信息学院Java程序设计实用教程(第4版)第25页/共98页访问修饰符 3-3该类或非该类均该类

16、或非该类均可访问可访问public只有该类可以访只有该类可以访问问private相同包中的类可相同包中的类可以访问以访问默认该类及其子类的该类及其子类的成员可以访问,成员可以访问,同一个包中的类同一个包中的类也可访问也可访问protected武汉理工大学信息学院Java程序设计实用教程(第4版)26第26页/共98页成员访问权限举例package chapter03.MemberAccess;public class MemberAcess public int var1;protected int var2;int var3;private int var4;public void meth

17、od1()protected void method2()void method3()private void method4()public void accessMember()var1=1;var2=2;var3=3;var4=4;this.method1();this.method2();method3();method4();武汉理工大学信息学院Java程序设计实用教程(第4版)27在同一个类中,所有访问权限的成员变量和方法都是可以访问的。第27页/共98页成员访问权限举例package chapter03.MemberAccess;public class MemberAccess

18、Test public static void main(String args)MemberAcess acc=new MemberAcess();acc.var1=5;acc.var2=6;acc.var3=7;/acc.var4=8;/private变量只能被本类访问acc.method1();acc.method2();acc.method3();/acc.method4();/private方法只能被本类访问武汉理工大学信息学院Java程序设计实用教程(第4版)28把本类移动到chapter03包中,var3变量和method3方法就不能被访问了。第28页/共98页3.对象属性的存取

19、方法set()和get()为了保障对象属性的隐藏性,一般不采用d.month=10这种直接的赋值语句,而采用set()或get()来操作属性变量。武汉理工大学信息学院Java程序设计实用教程(第4版)29如:在MyDate类中增加方法public int getYear()return year;public void setYear(int year)this.year=year;public int getMonth()return month;public void setMonth(int month)this.month=month;public int getDay()return

20、 day;public void setDay(int day)this.day=day;这样,外界都是通过这些get()和set()方法来存取MyDate类中的year、month和day变量。在Eclipse,提供自动生成成员变量的get()和set()的方法。第29页/共98页武汉理工大学信息学院Java程序设计实用教程(第4版)30静态成员Java类中的成员分为2种;实例成员和静态成员。其中static声明的成员为静态成员,否则为实例成员。实例成员属于对象,只有创建了实例,才能被访问。静态成员属于类,不需要创建实例,可以通过类名访问。如Math里面的很多方法就是定义为静态成员(Math

21、.random())。第30页/共98页静态成员规则在类外部使用ClassName.variableName访问成员变量;在类外部使用ClassName.methodName访问成员方法;在静态方法中,不能使用this或者super访问实例在类方法中,不能声明static变量;规规规规 则则则则可以调用其他静态方法直接访问静态变量不能使用 this或super 关键字武汉理工大学信息学院Java程序设计实用教程(第4版)31第31页/共98页 public static void main(String arg)/*初始化变量*/MyDate d=new MyDate(2009,7,18);M

22、yDate.nextYear(d1);使用类名称调用 static 方法public static void nextYear(MyDate d)d.year+;访问static方法举例武汉理工大学信息学院Java程序设计实用教程(第4版)32第32页/共98页33武汉理工大学信息学院Java程序设计实用教程(第4版)【例3.2】日期类的封装静态成员public class MyDate private int year,month,day;/实例成员变量 private static int this year=2016;/静态成员变量 public static int getThisYe

23、ar()/静态成员方法 return thisYear;/访问静态成员变量.public static void main(String args)System.out.println(今年是+MyDate.getThisYear();MyDate d1=new MyDate(2012,12,31);MyDate d2=new MyDate(2013,1,1);静态成员方法访问第33页/共98页武汉理工大学信息学院Java程序设计实用教程(第4版)34静态成员变量 MyDate.thisYear2012d1,d2这两个对像引用d1,d2这两个对象实例第34页/共98页MyDate类的功能扩展武

24、汉理工大学信息学院Java程序设计实用教程(第4版)35比较两个日期是否相等;计算前一天;计算后一天;计算是否闰年;第35页/共98页例3.2中对象值变化情况武汉理工大学信息学院Java程序设计实用教程(第4版)36第36页/共98页37武汉理工大学信息学院Java程序设计实用教程(第4版)浅拷贝与深拷贝 浅拷贝:使用一个已知实例采用拷贝构造方法初始化新实例。1.如果对象成员变量是基本类型时,成员变量逐个赋值,浅拷贝也能复制实例 public MyDate(MyDate d)this.year=d.year;this.month=d.month;this.day=d.day;第37页/共98页

25、38武汉理工大学信息学院Java程序设计实用教程(第4版)2.当对象成员变量也是对象时,只复制了引用,没有复制实例。public class Person String name;MyDate birthday;public Person(Person p)/拷贝构造方法 this.name=p.name;this.birthday=p.birthday;/引用赋值 Person p1=new Person(“李小明”),MyDate(1994,3,15);Person p2=new Person(p1);结果?第38页/共98页武汉理工大学信息学院Java程序设计实用教程(第4版)39深拷贝

26、:在包含引用数据类型的类的拷贝构造方法中,不仅要复制所用非引用成员变量值,还要为引用数据类型的成员变量创建新实例并初始化。这种复制方式为深拷贝。public Person(Person p)this.name=p.name;this.birthday=new MyDate(p.birthday);/创建实例 Person p1=new Person(“李小明”),MyDate(1994,3,15);Person p2=new Person(p1);p2.name=“张小明”第39页/共98页武汉理工大学信息学院Java程序设计实用教程(第4版)40【思考题3-3】为Person类增加以下方法:

27、public int getAge(int year)/返回当前对象在year年份的年龄public int getAge()/返回当前对象今年的年龄,重载public boolean equals(Person p)/比较当前对象与p引用实例对应成员变量值是否相等第40页/共98页41武汉理工大学信息学院Java程序设计实用教程(第4版)3.3 类的继承性继承提供使用现有类的所有功能,并在无需重新编写原来的类情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”。被继承的类称为“基类”、“父类”或者“超类”。继承的过程,就是从一般到特殊的过程。第41页/共98页继承概念父父 类

28、类 子类子类 父类父类/子类是子类是相对的相对的Cow类Lion类Tiger类类Animals类Carnivorous(食肉)类Herbivorous(食草)类Coat类武汉理工大学信息学院Java程序设计实用教程(第4版)42第42页/共98页什么是继承继承:一个类得到另一个类的全部或部分属性及方法的操作叫做继承父类:具有该体系类通用的属性和方法子类:从父类得到,同时也有自己的方法和属性武汉理工大学信息学院Java程序设计实用教程(第4版)43继承提供了在已有类的基础上创建新类的方式。第43页/共98页继承的特点继承的特点继承的特点具有层次结构子类继承了父类的属性和方法武汉理工大学信息学院J

29、ava程序设计实用教程(第4版)44第44页/共98页继承的优点继承的优点继承的优点代码的可重用性父类的属性和方法可用于子类设计应用程序变得更加简单可以轻松地自定义子类武汉理工大学信息学院Java程序设计实用教程(第4版)45继承是面向对象的核心特性,是实现抽象和共享、构造可复用软件的有效机制,最大限度地实现代码复用。第45页/共98页由继承派生类修饰符 class 类 extends 父类 implements 接口列表武汉理工大学信息学院Java程序设计实用教程(第4版)46第46页/共98页Java继承举例public class ParentClass public void prin

30、tHello()public class ChildClass extends ParentClass public static void main(String args)ChildClass t=new ChildClass();t.printHello();武汉理工大学信息学院Java程序设计实用教程(第4版)47t.printHello可以被调用吗?输出结果是什么?第47页/共98页48武汉理工大学信息学院Java程序设计实用教程(第4版)Student继承Person类public class Student extends Person String speciality;/专业

31、 String course;/课程 void registerCourse();/选课【例3.4】Student类继承Person类。/P77 Student继承了父类的name、birthday等属性和olderThen、getName、set等方法扩展了专业、课程等属性和选课等方法第48页/共98页49武汉理工大学信息学院Java程序设计实用教程(第4版)继承原则及作用 1.继承原则子类继承父类的成员变量子类继承父类除构造方法以外的成员方法子类不能继承父类的构造方法子类可以增加成员,可以重定义从父类继承来的成员,但不能删除它们。第49页/共98页2.继承的作用武汉理工大学信息学院Java

32、程序设计实用教程(第4版)50 继承是实现软件复用的重要措施,继承增加软件的可扩充能力,提高了软件的可维护性。第50页/共98页51武汉理工大学信息学院Java程序设计实用教程(第4版)3.Object类是所有Java的默认基类public class Object public Object()/构造方法 public String toString()/描述对象 public boolean equals(Object obj)/比较对象相等 protected void finalize()throws ThrowableJava中的类都是Object的子类public class Pe

33、rson extends Object第51页/共98页52武汉理工大学信息学院Java程序设计实用教程(第4版)4.子类对父类成员的访问权限子类不能访问父类的私有成员(private)。子类能够访问父类的公有成员(public)和保护成员(protected)。子类对父类的缺省权限成员的访问控制,以包为界分两种情况,可以访问当前包中权限修饰符权限修饰符同一类同一类同一包同一包不同包的子类不同包的子类所有类所有类public(公有公有)protected(保护保护)缺省缺省 private(私有私有)第52页/共98页子类对父类成员访问权限示例public class MemberAcess

34、public int var1;protected int var2;int var3;private int var4;.public class MemberAccessTest extends MemberAcess public static void main(String args)MemberAccessTest acc=new MemberAccessTest();acc.accessMember();acc.var1=5;acc.var2=6;acc.var3=7;/acc.var4=8;/private变量只能被本类访问武汉理工大学信息学院Java程序设计实用教程(第4版)

35、53第53页/共98页54武汉理工大学信息学院Java程序设计实用教程(第4版)子类的构造方法1.使用super()调用父类构造方法super(参数列表)public Student(String name,MyDate birthday,String spec)super(name,birthday);/调用父类同参数的构造方法 this.speciality=spec;2.默认执行super()public Student()/Java提供的默认构造方法 super();/调用父类构造方法Person()子类不能继承父类的构造方法子类能调用父类的构造方法调用父类的构造方法目的:初始化从父类

36、继承的成员变量第54页/共98页子类的构造方法没有调用super()或this(),将默认执行super()public Person()super();/调用父类构造方法Object()public Student()super();/默认调用 speciality=;武汉理工大学信息学院Java程序设计实用教程(第4版)55Student类中会默认调用Person父类构造函数。如果父类中没有默认构造函数,就会出现错误。第55页/共98页调用父类构造方法的语法为:super()或 super(参数列表);super()方法始终指向调用类的父类在创建子类对象时候,如果子类的构造函数没有显示调用

37、父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,会出错。武汉理工大学信息学院Java程序设计实用教程(第4版)56第56页/共98页构造函数使用注意一个类只有一个父类,一个父类可以有多个子类在子类中,凡是继承来的属性,必须要调用父类的构造方法来初始化先调用父类构造方法初始化父类属性,再初始化子类扩展属性。武汉理工大学信息学院Java程序设计实用教程(第4版)57第57页/共98页图3.7 子类构造方法逐个执行成员对象和父类的构造方法 武汉理工大学信息学院Java程序设计

38、实用教程(第4版)58public Student(String name,MyDate birthday,String Specicality)super(name,birtyday);this.speciality=speciality;第58页/共98页super使用1.调用父类的构造方法super(参数列表)2.引用父类同名成员子类隐藏父类成员变量super.成员变量子类覆盖父类成员方法super.成员方法(参数列表)武汉理工大学信息学院Java程序设计实用教程(第4版)59在子类里面调用被隐藏或者覆盖的父类成员的方式第59页/共98页60武汉理工大学信息学院Java程序设计实用教程(

39、第4版)3.4 类的多态性子类重定义父类成员类型的多态编译时多态和运行时多态性多态的方法实现第60页/共98页多态性 概念什么是多态:顾名思义就是拥有“多种形态”的含义,是指属性或方法表现为多种形态。java中的多态的表现形式一般分为两种:override(重写)和overload(重载)重写,重写override是父类和子类之间多态性的一种表现,重载overload是一个类中多态性的表现。武汉理工大学信息学院Java程序设计实用教程(第4版)61第61页/共98页(父类和子类Override)多态性 举例父类子类子类 -绘制和移动三角形绘制和移动三角形子类子类 -绘制和移动矩形绘制和移动矩形

40、 子类子类 -绘制和移动五边形绘制和移动五边形ShapeShapeDraw()Move()TriangleDraw()DrawTraingleMove()MoveTriangleVerticesRectangleDraw()DrawRectangleMove()MoveRectangleCornerPentagonDraw()DrawPentagonMove()MovePentagonVertices武汉理工大学信息学院Java程序设计实用教程(第4版)62第62页/共98页 子类重定义父类成员多态性实现方法重定义父类成员变量,则隐藏父类成员变量子类覆盖父类成员方法覆盖(override)是指

41、子类声明并实现父类中的同名方法并且参数列表也完全相同。子类继承并重载父类成员方法重载(overload)是指同一个类中的多个方法可以同名但参数列表必须不同。武汉理工大学信息学院Java程序设计实用教程(第4版)63第63页/共98页武汉理工大学信息学院Java程序设计实用教程(第4版)64【例3.5】Student类重定义从父类继承来的成员。方法名和参数完全相同,则被覆盖;方法名同而参数不同,则重载第64页/共98页例3.5分析Student和Person类中都声明私有的静态成员变量count,Person的count在子类中被隐藏,需要使用super.count访问;howMany方法在子类

42、Student中采用扩展的方式重写Set方法被子类Student继承并重载65第65页/共98页66武汉理工大学信息学院Java程序设计实用教程(第4版)类型的多态1.子类对象即是父类对象new Student()instanceof Person /truenew Person()instanceof Student /false 2.父类对象引用子类实例Person p=new Student();/赋值相容Student s=new Person();/语法错Object obj=new Person();/赋值相容子类通过继承扩展父类,子类是父类的一种特殊情况,子类对象包含了父类的所有

43、成员变量。通过引用p能访问到Student类中的所有成员吗?p只能访问父类Person类中声明的方法,但是执行的是被子类重载的方法。父类对象引用子类实例成立,反之错误第66页/共98页父类对象引用子类实例举例public class DtTest public void printHellopublic class DtTestExtend extends DtTest public void printWorldpublic void printHellopublic static void main(String args)DtTest t=new DtTestExtend();t.pri

44、ntWorld();t.printHello();武汉理工大学信息学院Java程序设计实用教程(第4版)67声明了DtTest类,定义了printHello方法声明了DtTestExtend子类,重载了printHello方法定义了printWorld方法父类的对象引用了子类的实例引用t能否调用子类的printWorld方法?t.printHello输出结果是什么,执行父类、还是子类中的方法?输出结果?Hello in extend Class第67页/共98页68武汉理工大学信息学院Java程序设计实用教程(第4版)编译时多态和运行时多态性1.编译时多态性方法重载都是编译时多态。Person

45、 p1=new Person(李小明,new MyDate(1979,3,15);p1.toString()/执行Person类的toString()Student s1=new Student(p1,计算机);s1.toString()/执行Student类的toString()如果编译时能够确定执行多态方法的中的哪一个,称为编译多态;否则,称为运行多态;当对象引用本类实例时,为编译时多态;否则为运行时多态。对象引用本类实例,编译多态第68页/共98页69武汉理工大学信息学院Java程序设计实用教程(第4版)2.运行时多态性Person p2=new Student(“通信工程”,p1);/

46、父类对象引用子类实例执行子类的toString()对象引用子类实例,运行多态;寻找(new Student().toString()匹配的执行方法 这个图也说明了Java采用单继承的好处。第69页/共98页70武汉理工大学信息学院Java程序设计实用教程(第4版)多态方法的实现1.多态的toString()方法Object类声明:public String toString()/返回当前对象的信息字符串 return getClass().getName()+Integer.toHexString(hashCode();方法的多态性使一个功能具有同一风格,在父类和子类之间具有相同的约定。使类易

47、于扩充功能,增强软件的可维护性。如Person、Student中都需要toString方法输出对象,equals比较两个对象是否相同这样的功能;所有这些方法都会被继承,并在子类里面通过覆盖实现多态性。第70页/共98页2.多态的equals(Object)方法Object类的equals(Object)方法public boolean equals(Object obj)return this=obj;子类Person覆盖Object类的equals(Object)方法public boolean equals(Object obj)/比较两个对象的值是否相等 /覆盖Object类的equal

48、s()方法 if(this=obj)/this指代调用当前方法的对象 return true;if(obj instanceof Person)/判断当前对象是否属于Person类 Person p=(Person)obj;/强制类型转换 return false;武汉理工大学信息学院Java程序设计实用教程(第4版)71第71页/共98页72武汉理工大学信息学院Java程序设计实用教程(第4版)3.5 类的抽象性用继承刻画包含关系抽象类最终类世界中的实体有多个种类,各类实体之间具有复杂的关系;面对对象的程序设计方法是把世界中的实体抽象为类;有些抽象出来的类不需要具体实现;第72页/共98页7

49、3武汉理工大学信息学院Java程序设计实用教程(第4版)用继承刻画包含关系抽象的图形画不出具体图形,没有对应的实例;它们的属性和行为如何定义?第73页/共98页74武汉理工大学信息学院Java程序设计实用教程(第4版)抽象类1.声明抽象类与抽象方法public abstract class ClosedFigure /闭合图形抽象类 public abstract double area();/计算面积,抽象方法,以分号;结束抽象类抽象方法第74页/共98页75武汉理工大学信息学院Java程序设计实用教程(第4版)抽象类2.抽象类的特点构造方法、静态成员方法不能被声明为抽象方法。一个非抽象类必

50、须实现从父类继承来的所有抽象方法。不能创建抽象类的实例。例如:ClosedFigure g=new ClosedFigure();/语法错第75页/共98页abstract 修饰符 3-1由abstract修饰的方法叫抽象方法;由abstract修饰的类叫抽象类抽象方法必须声明在抽象类中抽象方法语法:abstract type method_name(parameter_list);声明抽象类语法:abstract class 使用:父类中的某些抽象方法不包含任何逻辑,需要在子类中重写,子类提供这种抽象方法的实现细节武汉理工大学信息学院Java程序设计实用教程(第4版)76第76页/共98页a

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

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com