第3章 面向对象程序设计_第1页
第3章 面向对象程序设计_第2页
第3章 面向对象程序设计_第3页
第3章 面向对象程序设计_第4页
第3章 面向对象程序设计_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

安卓移动医疗应用开发面向对象程序设计03Contents.1类的封装实验2类的继承实验3类的多态实验4

抽象类实验5接口实验6类包实验7异常处理实验0类的基础知识0.类的基础知识0.1面向对象和面向过程编程思想函数1:打开冰箱(){人站在冰箱前,打开冰箱。。。}函数2:储存大象(){大象先迈左腿,再迈右腿。。。}函数3:关闭冰箱(){人站在冰箱前,关闭冰箱。。。}以事物为中心以分类的方式解决问题用类组织代码以过程为中心用函数组织代码按步骤去解决问题人{打开(冰箱){冰箱.打开();}存储(大象){大象.进入();}关闭(冰箱){冰箱.关闭();}}性能高易维护,易使用,易扩展优点面向过程面向对象举例特点人把大象装进冰箱冰箱{打开(){}关闭(){}}大象{进入(冰箱){}}共同点相辅相成,并不是对立。整体上用面向对象把控,细节上用面向过程解决。0.类的基础知识0.2类和对象面向对象具有共同属性和行为的事物的抽象客观存在的事物皆为对象对象是类的实例类是对象的模板类对象举例特点联系0.类的基础知识0.3类的定义类:对现实生活中具有共同属性和行为的事物的抽象。类的组成:属性和行为属性:在类中通过成员变量来体现(类中方法外的变量)行为:在类中通过成员方法来体现定义类的步骤定义类名编写类的成员变量编写类的成员方法publicclass类名{

//成员变量

变量1的数据类型变量1;

变量2的数据类型变量2 …

//成员方法

方法1;

方法2; …}类名:人(Person)成员变量:姓名(name)年龄(age)身高(height)性别(sex)成员方法:吃饭(eat)睡觉(sleep)自我介绍(introduce)0.类的基础知识0.4对象的使用创建对象格式:类名对象名=new构造方法名();示例:Personp=newPerson();Personp=newPerson();对象类型对象名称实例化构造方法(初始化)使用对象1、使用成员变量格式:对象名.变量名示例:2、使用成员方法格式:对象名.方法名()示例:p.eat()0.类的基础知识0.5构造方法作用:给创建的对象进行初始化格式:

publicclass类名{

修饰符类名(参数){}}示例:

publicclasstest{publicstaticvoidmain(String[]args){ Personp=newPerson();}}示例:

publicclassPerson{publicPerson(){ //构造方法内写的内容}}特点:一种特殊的方法,与类同名,无返回值调用方式:每实例化一个对象,类会自动调用构造方法使用隐式定义:Java编译器提供一个默认的无参构造方法显式定义:一个类可以定义多个构造方法使用注意事项:如果定义了构造方法,系统将不再提供默认的构造方法。如果定义了带参构造方法,还要使用无参构造方法,就必须再写一个无参构造方法。建议时刻保留无参构造方法的存在。生成构造方法快捷键:Alt+Insert——Constructor0.类的基础知识0.6方法的重载不带参构造方法:publicPerson(){ //构造方法内写的内容}带参构造方法:publicPerson(Stringa){ //构造方法内写的内容}方法重载指同一个类中定义的多个方法之间的关系,满足以下条件的多个方法相互构成重载方法位于同一个类中方法具有相同的方法名方法的参数不同:类型不同或者数量不同(与返回值无关)0.类的基础知识0.7成员变量和局部变量的区别区别成员变量局部变量类中的位置不同类中方法外方法内生命周期不同当前对象从创建到销毁当前方法从开始执行到执行完毕初始化值不同有默认的初始化值没有默认的初始化值,必须定义赋值后才能使用0.类的基础知识0.8this关键字的用法this关键字的使用场合:局部变量与成员变量命名相同时局部变量与成员变量同名,带this修饰的变量是成员变量局部变量与成员变量不同名,不管带不带this修饰,都指的都是成员变量,此时没有必要使用thisthis代表所在类的对象的引用方法被哪个对象调用,this就代表哪个对象publicclassPerson{

Stringname; //姓名

intage; //年龄//构造方法(带参)

publicPerson(Stringname,intage){

=name;

this.age=age;

}

}1.类的封装实验1.1实验内容创建ConvertTime类,在类中定义一个CalcTime类,进一步在CalcTime类中依次定义用于指定小时值、分钟值和秒值的常量TIME_VAL_HOUR、TIME_VAL_MIN和TIM_VAL_SEC,用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算小时值、分钟值和秒值的CalcHour()、CalcMin()和CalcSec(),用于计算三个时间值的CalcTimeVal()方法,用于获取三个时间值的GetTimeVal()方法。其中,CalcTimeVal()和GetTimeVal(),以及三个常量用public修饰,其余的成员变量和成员方法均用private修饰。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。1.类的封装实验1.2实验原理什么是封装?封装的概念:封装是把过程和数据包围起来,提供相应的方式进行获取。封装是一种信息隐藏技术,在java中通过关键字private,protected和public实现封装。通俗地说,把该隐藏的隐藏起来,该暴露的暴露出来。如何进行封装(以属性封装为例):(1)将属性私有化:利用权限修饰符来控制权限,防止被随意获取(2)提供公有的方法来访问(3)在方法中可进行访问限制自动生成代码快捷键:Alt+Insert封装的好处:提高代码的安全性1.类的封装实验1.3代码分析创建ConvertTime类,在类中定义一个CalcTime类,进一步在CalcTime类中依次定义用于指定小时值、分钟值和秒值的常量TIME_VAL_HOUR、TIME_VAL_MIN和TIM_VAL_SEC,用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算小时值、分钟值和秒值的CalcHour()、CalcMin()和CalcSec(),用于计算三个时间值的CalcTimeVal()方法,用于获取三个时间值的GetTimeVal()方法。其中,CalcTimeVal()和GetTimeVal(),以及三个常量用public修饰,其余的成员变量和成员方法均用private修饰。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。2.类的继承实验2.1实验内容

创建ConvertTime类,在类中定义一个父类CalcTime,在父类中依次定义用于指定小时值、分钟值的常量TIME_VAL_HOUR和TIME_VAL_MIN,用于保存小时值和分钟值的成员变量mHour和mMin,用于计算小时值和分钟值的CalcHour()和CalcMin()。然后定义一个继承父类的CalcAllTime子类,在子类中定义用于指定秒值类型的常量TIME_VAL_SEC,用于保存秒值的成员变量mSec,用于计算秒值的CalcSec()方法,最后,重写用于计算时间值的CalcTimeVal()方法和获取时间值的GetTimeVal()方法。在ConvertTime类中,通过new操作符创建一个CalcAllTime型对象,该对象名为cat,然后,在ConvertTime类中定义一个用于计算和显示时间的DispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。2.类的继承实验2.2实验原理继承学生类:Student

属性:国籍,姓名,学生号

方法:自我介绍,睡觉,学习教师类:Teacher

属性:国籍,姓名,教师号

方法:自我介绍,睡觉,讲课员工类:Employee

属性:国籍,姓名,工号

方法:自我介绍,睡觉,上班继承的格式格式:publicclass子类名extends

父类名{}范例:publicclassStudentextendsPerson{}Person:是父类,也被称为基类、超类Student:是子类,也被称为派生类继承的介绍:继承可以使得子类具有父类的属性和方法,还可以在子类中重新定义追加属性和方法。注意事项:继承必须在合理的范围内进行向上抽取。可以说:学生是人,狗是动物

不能说:狗是人抽取出共同的属性和方法人类:Person

属性:国籍,姓名

方法:自我介绍,睡觉学生类/教师类/员工类继承自人类示例:继承的好处:提高的代码的复用性和维护性。2.类的继承实验2.2实验原理重写方法重写表现形式:子类中出现和父类中一模一样的方法声明,但是方法体不同方法为什么要重写:当子类需要父类的功能,而子类又有自己特有的内容时,重写父类中的方法方法重写注意事项:可通过super关键字访问父类方法为防止方法名不一致,加上@override可通过方法名自动生成方法声明2.类的继承实验2.2实验原理重载与重写的区别重载:发生在同一个类中,当方法名相同,形参列表不同,多个方法构成了重载。重写:在不同类中,子类对父类提供的方法不满意的时候,要对父类进行重写。

英文位置修饰符返回值方法名参数方法体重载overload同一个类中无关无关必须相同必须不同不同重写override子类父类中大于等于小于等于必须相同必须相同不同2.类的继承实验2.2实验原理super和this关键字的区别super关键字的用法和this关键字的用法相似this:代表本类对象的引用super:代表父类存储空间的标识(可理解为父类对象引用)

关键字访问成员变量访问构造方法访问成员方法thisthis.成员变量访问本类成员变量this()访问本类构造方法this.成员方法()访问本类成员方法supersuper.成员变量访问父类成员变量super()访问父类构造方法super.成员方法()访问父类成员方法2.类的继承实验2.2实验原理权限修饰符修饰符同一个类中同一个包中子类

无关类不同包的子类不同包的无关类private√

默认√√

protected√√√

public√√√√2.类的继承实验2.3代码分析

创建ConvertTime类,在类中定义一个父类CalcTime,在父类中依次定义用于指定小时值、分钟值的常量TIME_VAL_HOUR和TIME_VAL_MIN,用于保存小时值和分钟值的成员变量mHour和mMin,用于计算小时值和分钟值的CalcHour()和CalcMin()。然后定义一个继承父类的CalcAllTime子类,在子类中定义用于指定秒值类型的常量TIME_VAL_SEC,用于保存秒值的成员变量mSec,用于计算秒值的CalcSec()方法,最后,重写用于计算时间值的CalcTimeVal()方法和获取时间值的GetTimeVal()方法。在ConvertTime类中,通过new操作符创建一个CalcAllTime型对象,该对象名为cat,然后,在ConvertTime类中定义一个用于计算和显示时间的DispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。3.类的多态实验3.1实验内容创建ConvertTime类,在类中定义一个CalcTime类,进一步在CalcTime类中依次定义用于指定小时值、分钟值和秒值的常量TIME_VAL_HOUR、TIME_VAL_MIN和TIM_VAL_SEC,用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算小时值、分钟值和秒值的CalcHour()、CalcMin()和CalcSec(),用于计算三个时间值的CalcTimeVal()方法,用于获取三个时间值的GetTimeVal()方法。其中,CalcTimeVal()和GetTimeVal(),以及三个常量用public修饰,其余的成员变量和成员方法均用private修饰。在ConvertTime类中,通过new操作符创建一个CalcTime型对象,该对象名为ct,然后,在ConvertTime类中分别定义一个不带参数和带参数的DispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。3.2实验原理多态3.类的多态实验多态的含义:同一个行为具有多个不同表现形式或形态的能力。多态的体现方法重载成员覆盖:继承、重写、父类引用指向子类对象多态的好处:提高了程序的扩展性。具体体现在定义方法的时候,使用父类型作为参数,将来在使用的时候,使用子类的类型参与操作。多态的弊端:不能访问子类所特有的功能举例:动物会叫,猫会喵喵叫,狗会汪汪叫猫cat=new猫();cat.call();猫会喵喵叫动物animal=new猫();animal.call();猫是动物,会喵喵叫动物animal=new狗();animal.call();狗是动物,会汪汪叫同一个事件发生在不同的对象上会产生不同的结果执行子类重写的方法,无法运行子类独有的方法多态中成员访问的特点(只能访问父类中有的成员)成员变量:访问的是父类中的成员变量成员方法:访问的是子类被重写的成员方法3.3代码分析(方法重载为例)3.类的多态实验创建ConvertTime类,在类中定义一个CalcTime类,进一步在CalcTime类中依次定义用于指定小时值、分钟值和秒值的常量TIME_VAL_HOUR、TIME_VAL_MIN和TIM_VAL_SEC,用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算小时值、分钟值和秒值的CalcHour()、CalcMin()和CalcSec(),用于计算三个时间值的CalcTimeVal()方法,用于获取三个时间值的GetTimeVal()方法。其中,CalcTimeVal()和GetTimeVal(),以及三个常量用public修饰,其余的成员变量和成员方法均用private修饰。在ConvertTime类中,通过new操作符创建一个CalcTime型对象,该对象名为ct,然后,在ConvertTime类中分别定义一个不带参数和带参数的DispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。4.抽象类实验4.1实验内容创建ConvertTime类,在类中定义一个Time抽象类,在抽象类中依次定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,以及用于显示时间的DispTime()方法,该方法为抽象方法。然后定义一个继承抽象类的CalcTime子类,在子类中定义用于计算小时值的CalcHour()方法,用于计算分钟值的CalcMin()方法,用于计算秒值的CalcSec()方法,最后,重写用于显示时间的DispTime()方法。在ConvertTime类中,通过new操作符创建一个CalcTime型对象,该对象名为ct,然后,在ConvertTime类中分别定义一个用于计算和显示时间的CalcDispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。4.2实验原理抽象类的理解4.抽象类实验抽象类的引入:动物是抽象的事物,只有实例化为具体的动物才知道具体的行为。所以在创建动物类的时候可以不写具体的行为,体现在方法中只有方法申明没有方法体。抽象类的特点抽象类和抽象方法必须使用abstract关键字修饰抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类抽象类不能实例化:可通过子类对象实例化,称为抽象类多态抽象类的子类如果不重写抽象类中的所有抽象方法,则还是抽象类成员变量:可以是变量,也可以是常量成员方法:可以有抽象方法(限定子类必须完成某些动作),也可以有非抽象方法(提高代码复用性)定义抽象方法:[权限修饰符]abstract

返回值类型方法名(参数列表);定义抽象类:[权限修饰符]abstractclass类名{//类体}动物抽象类的由来:在java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。4.3代码分析4.抽象类实验

创建ConvertTime类,在类中定义一个Time抽象类,在抽象类中依次定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,以及用于显示时间的DispTime()方法,该方法为抽象方法。然后定义一个继承抽象类的CalcTime子类,在子类中定义用于计算小时值的CalcHour()方法,用于计算分钟值的CalcMin()方法,用于计算秒值的CalcSec()方法,最后,重写用于显示时间的DispTime()方法。在ConvertTime类中,通过new操作符创建一个CalcTime型对象,该对象名为ct,然后,在ConvertTime类中分别定义一个用于计算和显示时间的CalcDispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。5.接口实验5.1实验内容创建ConvertTime类,在类中定义一个接口Time,在接口中依次定义用于小时、分钟、秒值默认值DEFAULT_HOUR、DEFAULT_MIN和DEFAULT_SEC,用于显示时间的DispTime()方法,该方法为抽象方法。然后定义一个实现接口Time的CalcTime类,在该类中定义用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算小时值、分钟值和秒值的CalcHour()、CalcMin()和CalcSec()方法,最后,重写用于显示时间的DispTime()方法。在ConvertTime类中,通过new操作符创建一个CalcTime型对象,该对象名为ct,然后,在ConvertTime类中分别定义一个用于计算和显示时间的CalcDispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。5.2实验原理状态修饰符:static5.接口实验static修饰属性static修饰属性的应用场景:某些特定的数据想要在内存中共享,这个情况下,就可以用static修饰的属性访问方式:对象名.属性名

类名.属性名(推荐)静态内容被所有该类的对象共享(先于对象存在)5.2实验原理状态修饰符:final5.接口实验final的用法final修饰变量:表明该变量是常量,不能被再次赋值,约定俗成的规定-名字大写final修饰方法:表明该方法是最终方法,不能被子类重写final修饰类:表明该类是最终类,不能被继承5.2实验原理接口的理解5.接口实验接口的引入:接口是一种公共的规范标准。Java中的接口体现在对行为的抽象。JDK1.8之前,接口只包含常量和抽象方法。接口的特点接口用关键字interface修饰实现接口用implements表示成员变量只能是常量:默认修饰符publicstaticfinal成员方法只能是抽象方法:默认修饰符publicabstract接口的实现类如果不重写所有抽象方法,就是抽象类接口不能实例化

可通过实现类对象实例化,称为接口多态

多态的形式:具体类多态,抽象类多态,接口多态

多态的前提:有继承或者实现关系,有方法重写,有父

(类/接口)引用指向(子/实现)类对象定义接口:[权限修饰符]interface

接口名[extends父接口名列表]{[public][static][final]常量;[public][abstract]方法;}实现接口:[权限修饰符]class子类名implements

接口名1,接口名2,…{//类体}5.2实验原理类和接口的关系5.接口实验类和类的关系继承关系,只能单继承,但可多层继承类和接口的关系实现关系,可以单实现,也可多实现,还可以继承一个类的同时实现多个接口接口和接口的关系继承关系,可以单继承,也可多继承5.2实验原理抽象类和接口的区别5.接口实验设计理念的区别抽象类对类抽象,包括属性、行为接口对行为抽象,主要包括行为抽象类是对事物的抽象,而接口是对行为的抽象5.2实验原理抽象类和接口的区别举例5.接口实验//抽象类publicabstractclassPhone{

publicabstractvoidcall();

publicabstractvoidtext();}//接口publicinterfacePhone{voidcall();voidtext();}例子:当手机可以看视频手机基本功能打电话和发短信,额外增加看视频的功能。//抽象类publicabstractclassVideoPhone{

publicabstractvoidcall();

publicabstractvoidtext();

publicabstractvoidvideo();}//接口publicinterfaceVideoPhone{voidcall();voidtext();

voidvideo();}不够灵活5.2实验原理抽象类和接口的区别举例5.接口实验publicinterfaceVideo{voidvideo();}publicabstractclassPhone{publicabstractvoidcall();publicabstractvoidtext();}publicclassVideoPhoneextendsPhoneimplementsVideo{

publicvoidcall(){

//….

}publicvoidtext(){ //….}

publicvoidvideo(){ //….}}手机固有的功能:抽象类手机添加的功能:接口通过类继承和接口实现组装功能5.3代码分析5.接口实验只需要显示的场合:需要计算和显示的场合:6.类包实验6.1实验内容新建一个CalcTime.java文件,并在该文件中创建CalcTime类,并指定包名为com.leyutek.calc。在CalcTime类中依次定义用于指定小时值、分钟值和秒值的常量TIME_VAL_HOUR、TIME_VAL_MIN和TIM_VAL_SEC,用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算小时值、分钟值和秒值的CalcHour()、CalcMin()和CalcSec()方法,用于计算三个时间值的CalcTimeVal()方法,用于获取三个时间值的GetTimeVal()方法。其中,CalcTimeVal()和GetTimeVal(),以及三个常量用public修饰,其余的成员变量和成员方法均用private修饰。新建一个ConvertTime类,通过import导入CalcTime类包,并在ConvertTime类中通过new操作符创建一个CalcTime型对象,该对象名为ct,然后,在ConvertTime类中定义用于计算和显示时间的DispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转换,并输出转换结果。6.2实验原理类包的概述6.类包实验包的定义格式格式:package包名;(多级包用.分开)范例:packagecom.leyutek.ConvertTime;包的本质是文件夹,包的作用是对类进行分类管理。为什么需要类包?张三张三工学院商学院解决命名冲突导包的格式格式:import包名;(多级包用.分开)范例:importcom.leyutek.ConvertTime;6.3代码分析6.类包实验

新建一个CalcTime.java文件,并在该文件中创建CalcTime类,并指定包名为com.leyutek.calc。在CalcTime类中依次定义用于指定小时值、分钟值和秒值的常量TIME_VAL_HOUR、TIME_VAL_MIN和TIM_VAL_SEC,用于保存小时值、分钟值和秒值的成员变量mHour、mMin和mSec,用于计算小时值、分钟值和秒值的CalcHour()、CalcMin()和CalcSec()方法,用于计算三个时间值的CalcTimeVal()方法,用于获取三个时间值的GetTimeVal()方法。其中,CalcTimeVal()和GetTimeVal(),以及三个常量用public修饰,其余的成员变量和成员方法均用private修饰。新建一个ConvertTime类,通过import导入CalcTime类包,并在ConvertTime类中通过new操作符创建一个CalcTime型对象,该对象名为ct,然后,在ConvertTime类中定义用于计算和显示时间的DispTime()方法。在main()方法中获取键盘输入值(0~86399之间的值,包括0和86399),然后,实现秒值-时间值转

温馨提示

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

评论

0/150

提交评论