类的封装继承和多态信息学院级.pptx
《类的封装继承和多态信息学院级.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深拷贝
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 封装 继承 信息 学院
限制150内