




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章Java面向对象程序设计,面向对象程序设计的基本概念封装继承多态内部类包的使用,工作场景,了解了蛋糕店的基本业务数据和处理后,现在要分析蛋糕店相关业务对象和各种实际操作。WF蛋糕店每天都能烤出各种各样的蛋糕,有意氏蛋糕、巧克力蛋糕、冰淇淋蛋糕、奶油水果蛋糕等,每种蛋糕无论从味道、编号、价格、重量等都有各不相同,比如巧克力蛋糕的编号是B01,价格为每磅40元;巧克力蛋糕的重量级别为13磅不等。,6.2面向对象程序设计的基本概念,面向对象分析的思想是根据人们研究的现实世界中复杂的对象是如何由许多小的、简单的对象组成的原理建立的,并认为不同的物体有共性,共性存在于个性之中,相互之间存在各种各样的联系,这种联系导致物体状态的变化。面向对象程序设计(OOP)是以对象和类为基础,由单个能够起到子程序作用的单元或对象组合而成。它的核心有:封装、继承性、多态性。,对象有两个层次的概念:现实生活中对象指的是要研究的任何事物,即客观世界的实体;系统中对象是基本的运行实体,并把属性和行为封装为一个整体。它包括属性和方法。其中属性表明对象的状态,方法表明对象所具有的行为。现实世界里有很多对象,如学生、空调、汽车等。,6.2面向对象程序设计的基本概念对象,封装是一种信息隐蔽技术,使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性,而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。,6.2面向对象程序设计的基本概念封装,类是描述对象的“基本原型”,它定义一类对象所能拥有的数据和能完成的操作。在程序设计中,类是程序的基本单元。把所有的具有相同性质的这些对象进行归为一类,对象是类的一个实例。类可有其子类,也可有其它类,形成类层次结构。例如,学校里有很多学生,每个学生都是一个对象实例,而“学生”则是一个类。,6.2面向对象程序设计的基本概念类,6.2面向对象程序设计的基本概念类的实例,类是在对象之上的抽象,而对象是类的实例,即对象是类的具体化。例如,把学生归为一类,张三同学就是学生类的一个具体实例。,Carcar1;Carcar2;.,实例,实例,6.2面向对象程序设计的基本概念类的继承,继承是子类利用父类中定义的方法和变量,就像它们属于子类本身一样。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。,6.2面向对象程序设计的基本概念类的多态性,多态性是对象根据所接收的信息而做出动作。消息是对象之间进行通信的一种构造。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。在面向对象程序设计中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。,6.3封装类,蛋糕类的定义如下:/*蛋糕对象*/publicclassCakeObject/类名为CakeObject/类体的内容,6.3封装类成员,蛋糕类有各种属性和方法,前面我们给出了一个创建类的框架,现在具体实施。蛋糕类包括的属性有编号、重量、价格等,方法有金额计算等。,6.3封装成员变量与局部变量,在类体的变量部分中,其定义的变量称为类的成员变量;而除去成员变量,在方法中定义的变量和方法应用到的参数均属于局部变量。成员变量又分为实例变量和类变量,,(1)二者应用到Java中任一数据类型。(2)局部变量在方法内声明,而成员变量即类体变量,在创建类体时声明。(3)局部变量的作用范围只限于方法里,作用范围之外的其他方法没有不能访问它的局部变量。这点就与成员变量不同,凡是在同一类体中的方法都可以访问成员变量。(4)当二者变量命名相同时,在方法中调用同名变量时,成员变量被隐藏,真正被调用的是局部变量。,6.3封装成员变量与局部变量比较,6.3封装关于this,当蛋糕类的成员方法如setCakeId设置蛋糕编号的方法,需访问类的成员变量cakeCode。如下:publicvoidsetCakeId(StringcakeCode)/设置蛋糕编码的方法this.cakeCode=cakeCode;,6.3封装关于super,蛋糕店在对员工进行管理时,管理员类继承了员工类的属性或方法,当二者的方法名或属性名同名时,应该如何调用父类即员工类的方法或属性?,6.3封装方法,类包括类声明和类体。类体中包含方法,而方法同样包括方法声明和方法体。格式如下:方法声明包括方法名、返回类型和外部参数。方法体是方法的实现部分,它包括局部变量的声明以及所有合法的Java指令。,6.3封装方法声明,方法声明如下:StringtoString(intaa)String是返回的数据类型,toString是方法名,aa是外部参数。方法也可以不要求有返回类型和外部参数,对于这种方法的声明可以用void代替,如下:voidprint(),6.3封装方法体,方法体是方法的实现部分。如下:publicStringgetCakeId()/获取蛋糕编码的方法returncakeCode;publicvoidsetCakeId(StringcakeCode)/设置蛋糕编码的方法this.cakeCode=cakeCode;,6.3封装方法重载,方法的重载是一个类中含有许多同名的方法,且带有不同的参数列表。getVolume()方法的重载如下:floatgetVolume(floatr);doublegetVolume(floatx,inty);floatgetVolume(intx,floaty);doublegetVolume(floatx,floaty,floatz);,6.3封装构造方法,当我们创建蛋糕类的对象时,需给对象赋予特定的属性。如创建一个巧克力蛋糕对象后,该对象就具有属于它的蛋糕名称、编号等。初始化蛋糕对象需要应用构造方法。,6.3封装构造方法重载,【语法】调用重载构造方法创建对象CakeObject1cake1=newCakeObject1();CakeObject1cake2=newCakeObject1(B01,巧克力蛋糕,40);其中,调用构造方法自动地确定了创建对象的初始状态;构造方法在对象创建时为该对象的成员变量赋予初始化值;和访问方法一样用点运算符访问成员变量。,6.3封装方法和变量的访问权限,Java通过设置类成员的访问权限,来实现封装的特性,共定义了4种访问权限:(1)用关键字private修饰的成员变量和方法称为私有变量和私有方法;(2)用public修饰的成员变量和方法称为公有变量和公有方法;(3)不用任何修饰符的成员变量和方法被称为友好变量和友好方法;(4)用protected修饰的成员变量和方法被称为受保护的成员变量和受保护的方法。,6.4继承,窝夫蛋糕店每天都能烤出各种各样的蛋糕,有法国宫廷蛋糕、意氏蛋糕、巧克力蛋糕、冰淇淋蛋糕、奶油水果蛋糕等,每种类型的蛋糕都继承了蛋糕类的属性,包括编号、价格和重量等。创建蛋糕类之后,现在继续创建每种类型的蛋糕类,比如奶油水果蛋糕类。,6.4继承继承的实现,创建蛋糕类的子类奶油水果蛋糕类,如下:class奶油水果蛋糕extends蛋糕;继承得到的类为子类,被继承的类为父类,父类包括所有直接或间接被继承的类。extends是继承的关键字。,6.4继承继承数据成员和方法,如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量和方法作为自己的成员变量。如果子类和父类不在同一个包中,那么,子类继承了父类的protected、public成员变量做为子类的成员变量,并且继承了父类的protected、public方法为子类的方法。如果子类和父类不在同一个包里,子类不能继承父类的默认变量和默认方法。,6.4继承覆盖方法,如果奶油水果蛋糕类需要自己定义计算金额的方法,而计算金额的方法已经被蛋糕类定义了,但是不能满足奶油水果蛋糕类的计算要求。这时可以应用方法的覆盖来满足奶油水果蛋糕类的计算要求。,6.4继承覆盖方法,父类和子类都声明了同名的变量price,子类的price隐藏了父类的price,此时二者不是继承关系,可以用this.price引用本类的变量,而用super.price引用被隐藏的父类同名变量。,6.4继承继承中注意的问题,继承中应注意以下几点:子类不能继承父类的构造方法;由于Java只支持单重继承机制,不支持多重继承,所以声明的类只能有一个超类。,6.5多态抽象类,由于对象高级抽象的需要,希望蛋糕类只需要说明方法首部,而不需要或不可能说明其方法体,其方法体只能由其子类奶油蛋糕类来完成,如何才能实现?,6.5多态抽象类的定义,抽象类不能创建任何对象,抽象类只是用来由其子类继承。用关键字abstract来声明抽象方法,只允许声明,而不允许实现。例如:abstractvoidgetPrice()用关键字abstract修饰的类称为抽象类。abstractclassA/A为抽象类.,6.5多态抽象类的使用,一个abstract类只关心它的子类是否具有某种功能,并不关心功能的具体行为,功能的具体行为由子类负责实现。应用抽象类时abstract类也可以没有abstract方法;但如果一个类中含有abstract方法,那么这个类必须用abstract来修饰。,6.5多态接口的定义,蛋糕店业务包括采购、制作、销售、统计等,通过分类定义不同接口,接口包括这些业务功能。每种蛋糕根据不同特点继承相应的接口,再实现具体的操作过程。这样把不同类型的蛋糕类归于不同的接口,可以更好的管理它们。,6.5多态接口的定义,创建一个蛋糕销售接口。结果如下:interfaceCakeSale/CakeSale是接口名称doubleprice=0;doubleweight=0;publicdoublegetSaleSum();,6.5多态接口的使用,【语法】接口使用classimplements,其中,一个类通过使用关键字implements声明自己使用一个或多个接口;如果使用多个接口,用逗号隔开接口名。,6.5多态接口的继承,如何避免Java的单继承缺陷,使蛋糕类实现多继承机制?,6.5多态内部类,WF蛋糕店的蛋糕在每类蛋糕下面还有很多不同的蛋糕,其中,巧克力蛋糕包括巧克力奶油蛋糕。所以为了管理的方便,可以在巧克力蛋糕类内部中定义巧克力奶油蛋糕类。,6.6包为什么使用包,WF蛋糕店的各种蛋糕类如何才能将其分类进行管理?包是Java语言中有效管理类的机制。,6.7包包的定义,package语句的一般格式为:package包名可以是一个合法的标识符,也可以是若干个标识符加”分割而成,如:.cakepack;,6.6包包的层次结构,包的层次结构包括子包和类文件和接口文件(一个类或一个接口编译后都产生一个相应字节码文件)。包的层次结构类似文件夹的层次结构。例如:packagecom.menu;,6.6包运行包中的类,WF蛋糕店的蛋糕类定义了一个.cakepack包,下面在dos环境下运行此包中的类。,6.6包引入包中的类,在Java程序中需要使用某些包中的类或接口,仅需要在程序文件的开头,写上一行import语句,指出要导入哪个包的哪些类。importjava.awt.image;/表示只引入包java.awt中的image类如果要引入一个包中的全部类,则可以用星号来代替,如importjava.awt.*;,6.6包引入包中的类,WF蛋糕店为各种蛋糕类定义一个.cakepack包,并将生成的包放在c:dangao目录下,当每种蛋糕类需应用同一个CakeClass类时,无需重新定义一个与CakeClass相同的类,只需要将其引入即可。,6.7包类的访问,类和包是封装的一种手段,类是数据及代码的容器,包是类和其他子包的一种容器。Java除了设置类成员的访问权限,还能通过设置类的访问权限,来实现封装的特性。,6.7包类的访问,在声明类时,如果用public关键字修饰的类,称为公有类。可以在任何包的一个类中,使用public类创建对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 实验小学突发停电事故应急预案10篇
- 水表井安全知识培训内容课件
- 人防物资调配与储存管理方案
- 小学五年级英语上册Unit5单元重难点知识速记与巧练(含答案)
- 氢能产业园氢能燃料电池商业化推广策略
- 隧道水文勘察与分析
- 学生宿舍节能减排技术应用方案
- 建筑工程项目施工现场卫生管理方案
- 水电站安全知识培训内容课件
- 知识点3.2造型要素设计构成设计造型75课件
- 生物制品生产工艺过程变更管理技术指导原则
- 建筑施工现场签证单(模板)
- GBZ(卫生) 49-2014职业性噪声聋的诊断
- GB/T 9729-2007化学试剂氯化物测定通用方法
- GB/T 7588.2-2020电梯制造与安装安全规范第2部分:电梯部件的设计原则、计算和检验
- GB/T 13560-2017烧结钕铁硼永磁材料
- 三视图及尺寸标注课件
- 混凝土配合比验证检验委托书模板
- 住房公积金投诉申请书
- 众辰变频器说明书3400
- 小学教师量化考核表
评论
0/150
提交评论