版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第四章第四章 Java面向对象特性面向对象特性对象与类对象与类对象生命周期对象生命周期类的创建类的创建重载重载子类子类2对象的基本概念对象的基本概念面向对象程序语言三个关键特点:面向对象程序语言三个关键特点:封装封装 ( Encapsulation )多态多态 ( Polymorphism )继承继承 ( Inheritance )3基本数据类型和聚集类型的变量与一些操作基本数据类型和聚集类型的变量与一些操作(如(如+, -)之间不需特殊的联系。)之间不需特殊的联系。在面向对象语言中,在数据类型的声明与操作在面向对象语言中,在数据类型的声明与操作 这些数据的代码声明之间建立紧密联系,这种这些
2、数据的代码声明之间建立紧密联系,这种 联系通常描述为一种抽象数据类型。联系通常描述为一种抽象数据类型。 在在Java中,抽象数据类型的概念用类来实现。中,抽象数据类型的概念用类来实现。 抽象数据类型抽象数据类型4类和对象类和对象类是特定类型对象的定义,包括:对象包含的类是特定类型对象的定义,包括:对象包含的 数据,对象的创建及对象对自身数据操作的方法。数据,对象的创建及对象对自身数据操作的方法。类是一个模板。类是一个模板。对象是在其类模型基础上构造出的,是具体的对象是在其类模型基础上构造出的,是具体的 实例。实例。5类和对象举例类和对象举例类定义:类定义:Class EmpInfoString
3、 name;String designation;String department;void print( ) System.out.println(name+“is”+designation+“at”+department);对象的生成与使用:对象的生成与使用:EmpInfo employee = new EmpInfo( ); = “ Robert Javaman”;employee.designation = “Manager”;employee.department = “Coffee shop”;employee.print( ); .6对象生命周期对象生
4、命周期 创建对象创建对象 使用对象使用对象 清除不用的对象清除不用的对象7创建对象创建对象例:例:Point origin_one ;origin_one = new Point(23, 94);Rectangle rect_one = new Rectangle(origin_one, 100, 200);Rectangle rect_two = new Rectangle(50, 100);创建对象的三个步骤:创建对象的三个步骤: 声明声明 (Declaration ) 实例化(实例化(Instantiation) 初始化(初始化(Initialization)8对象实例化过程对象实例化过
5、程构造与初始化对象的过程(调用构造与初始化对象的过程(调用new Xxxx(): 开辟内存空间(变量、方法体代码)及类成员开辟内存空间(变量、方法体代码)及类成员 变量变量的初始化的初始化:数值型:数值型:0; 布尔型:布尔型:false; 引用型:引用型:null; 字符串型:字符串型:null; 显式初始化:执行类成员声明时带有的简单显式初始化:执行类成员声明时带有的简单 赋值赋值表达式。表达式。 public class Initializedprivate int x = 5 ;private String name = “Fred”; 执行构造函数。执行构造函数。9对象的回收对象的回
6、收垃圾收集机制(垃圾收集机制(garbage collection):):Java运行环境当确定运行环境当确定某个对象不再被使用时,将其删除。某个对象不再被使用时,将其删除。一个对象在没有引用指向它时,可作为垃圾收集。一个对象在没有引用指向它时,可作为垃圾收集。垃圾搜集器:垃圾搜集器:Java运行环境中的垃圾搜集器周期性地释放运行环境中的垃圾搜集器周期性地释放不用对象占用的空间。不用对象占用的空间。10垃圾收集机制垃圾收集机制C+:A *a=new A( );A *b=a;A *c=a;Java :A a=new A( );A b=a;A c=a;a b c b c(指针悬空)a b c b
7、c/a 使用完,将其删除使用完,将其删除delete a; /a 使用完,将其删除使用完,将其删除 a= null ; 11类的创建类的创建z 12构造方法定义:构造方法定义: public 类名(参数)类名(参数) 注意:注意:方法名必须与类名相同。方法名必须与类名相同。不能带返回类型。不能带返回类型。类的构造函数类的构造函数13如果在类定义中无构造函数,如果在类定义中无构造函数,Java在编译时在编译时可缺省加入构造方法。如可缺省加入构造方法。如 public Employee( ) ;一旦在类中有一个自己声明的构造函数,则缺省一旦在类中有一个自己声明的构造函数,则缺省的构造函数将不被加到
8、源程序中。的构造函数将不被加到源程序中。缺省构造函数缺省构造函数14类成员方法定义类成员方法定义一般格式:一般格式: ()throws 方法是传值的,方法调用不会改变参数的值。方法是传值的,方法调用不会改变参数的值。当对象作为参数时,参数的值是该对象的引用,当对象作为参数时,参数的值是该对象的引用, 这时对象的内容可以在方法中改变,但是对象的这时对象的内容可以在方法中改变,但是对象的 引用不会改变。引用不会改变。15举例举例Public class PassTestfloat ptValue;public void changeInt(int value)value = 55 ; public
9、 void changeStr(String value)value = new String(different“); public void changeObjValue( PassTest ref)ref.ptValue = 99.0f; public static void main(String args )String str;int val;PassTest pt= new PassTest( );val = 11;pt.changeInt(val);System.out.println(“Int value is:” +val);str = new String(“hello”
10、);pt.changeStr(str);System.out.println(“str value is:” +str);pt.ptvalue = 101.0f ;pt.changeObjValue(pt);System.out.println(“pt value is:” +pt.ptValue);结果:结果: Int Value is : 11Str Value is : hellopt value is : 99.0f16数据隐藏与封装数据隐藏与封装数据隐藏:使用数据隐藏:使用private定义的成员变量,只能定义的成员变量,只能 在成员方法中使用,其它方法中禁止使用。在成员方法中使用,
11、其它方法中禁止使用。优点:优点: 保证对象中数据的一致性。保证对象中数据的一致性。封装:基本数据和对数据进行的操作方法的结合。封装:基本数据和对数据进行的操作方法的结合。 优点:优点:隐藏类中具体实现的细节。隐藏类中具体实现的细节。强迫程序员使用统一的接口访问数据。强迫程序员使用统一的接口访问数据。使代码可维护性好。使代码可维护性好。17数据隐藏与封装举例数据隐藏与封装举例Class Dateprivate int day, month, year;void setDate( int a, int b, int c)day = a;month = b;year = c ;Date d1;d1.
12、new Date( );d1.setDate(30,9,2001);.d1.day = 30;(错误!)错误!)18“this “引用引用关键字关键字this 用来指向当前对象本身。用来指向当前对象本身。例:例:class Date private int day, month,year;public Date getTommorrow( )this.day+;19重载(重载(Overloading)含义:在同一个类中一个方法名被用来定义多个含义:在同一个类中一个方法名被用来定义多个 方法。方法。 classScreen public void print( int i) public voi
13、d print( float i) public void print( String str ) 重载必须遵守原则:重载必须遵守原则: 参数表必须不同,以此区分不同方法体。参数表必须不同,以此区分不同方法体。返回类型、修饰符可相同或不相同。返回类型、修饰符可相同或不相同。20激活重载的构造函数激活重载的构造函数在一个构造函数中可以利用另一个构造函数。在一个构造函数中可以利用另一个构造函数。class Employeeprivate String name;private int salary;public Employee(String n, int s)name = n ;salary =
14、 s;public Employee( String n) this(n,0); public Employee( ) this(“Unknown”); 21子类子类子类表示类之间一种子类表示类之间一种“属于属于”( is a )关系。关系。例:例:public class Employee String name ;Date hireDate ;Date dateofBirth ;String jobTitle ;int grade ;public class Manager String name ;Date hireDate ;Date dateofBirth ;String jobTi
15、tle ;int grade ;String department ;Employee subordinates;22 Java中用中用 extends 关键字定义子类。关键字定义子类。Extends 关键字关键字public class Employee String name ;Date hireDate ;Date dateofBirth ;String jobTitle ;int grade ;子类是从已有的类创建新类的一种方法。子类是从已有的类创建新类的一种方法。public class Manager extends Employee String department ;Empl
16、oyee subordinates; 23子类子类子类继承父类的属性、功能(方法),子类中只子类继承父类的属性、功能(方法),子类中只 需声明特有的东西。需声明特有的东西。带带private 修饰符的属性、方法是不能被继承的。修饰符的属性、方法是不能被继承的。构造函数不能被继承。构造函数不能被继承。在方法中调用构造方法用在方法中调用构造方法用this()。调用父类的构造方法用调用父类的构造方法用super()。 - super 指向该关键字所在类的父类。指向该关键字所在类的父类。24构造不同类型数据的集合构造不同类型数据的集合 Java中允许构造如下类型的数组:中允许构造如下类型的数组: Em
17、ployee staff = new Employee1024;staff0 = new Manager( );staff1 = new Worker();staff2 = new Employee(); - staff 是由多种类型的对象组成的。是由多种类型的对象组成的。 Java中任何一个子类的实例都可作为父类的实例中任何一个子类的实例都可作为父类的实例使用,可以调用父类具有的方法。使用,可以调用父类具有的方法。25单继承单继承 Java是单继承的,即只能从一个类继承,是单继承的,即只能从一个类继承, extends后类名只能有一个。后类名只能有一个。单继承的优点:单继承的优点:代码更可靠
18、代码更可靠可以用接口弥补可以用接口弥补 用一个类实现多个接口,达到多继承效果。用一个类实现多个接口,达到多继承效果。26重写(重写(Overriding methods)子类可以改变从父类继承的行为。子类可以改变从父类继承的行为。被重写方法的返回值、方法名、参数列表要被重写方法的返回值、方法名、参数列表要 与父类中的方法完全一样。与父类中的方法完全一样。27Overriding Overriding 示例示例public class Stack private Vector items; / code for Stacks methods and constructor not shown /
19、 overrides Objects toString method public String toString() int n = items.size(); StringBuffer result = new StringBuffer(); result.append(); for (int i = 0; i n; i+) result.append(items.elementAt(i).toString(); if (i n-1) result.append(,); result.append(); return result.toString(); 28方法重写的规则方法重写的规则必
20、须返回与原来方法完全相同的返回值。必须返回与原来方法完全相同的返回值。方法的访问权限不能缩小。方法的访问权限不能缩小。不能抛出新的例外。不能抛出新的例外。29多多 态态An object has only one form, while a variable is polymorphism,since it can refer to objects of different forms,polymorphism is the ability to have many different forms.30 Java允许父类对象的变量作为子类对象的变量允许父类对象的变量作为子类对象的变量 使用。使
21、用。 如:如:Employee e = new Manager( );但通过该变量但通过该变量(如如e)只能访问父类的方法,子类只能访问父类的方法,子类特有的部分被隐藏。特有的部分被隐藏。运行时确定使用父类还是子类的方法。运行时确定使用父类还是子类的方法。 Employee e = new Manager(); e.getDetails();多多 态态31Super关键字关键字Super指向该关键字所在类的父类。指向该关键字所在类的父类。Public class Empolyee private String name ;private int salary;public String get
22、Details( )return “Name: ”+name+“nSalary:”+salary;public class Manager extends Empolyee private String department ;public String getDetails( )return super.getDetailes( )+nDepartment: “+department;32“instanceof”及类型强制转换及类型强制转换 Instanceof 测试对象类型测试对象类型 Empolyee a = new Manager(); 则则 a instanceof Manager
23、为为true;类型转换类型转换父类弱、子类强,指向父类的引用不能直接按子类引用,父类弱、子类强,指向父类的引用不能直接按子类引用,必须要强制类型转换后才能作为子类的引用使用。必须要强制类型转换后才能作为子类的引用使用。例:例:public void method( Employee e)if (e instanceof Manager)Manager m = (Manager) e ;m.department = “”; 33子类对象的初始化子类对象的初始化初始化对象是很结构化的。初始化对象是很结构化的。在对对象初始化时,分三步:在对对象初始化时,分三步:分配空间,并初始化为分配空间,并初始化
24、为“0”值。值。按继承关系从顶向下显式初始化。按继承关系从顶向下显式初始化。按继承关系从顶向下调用构造函数。按继承关系从顶向下调用构造函数。34调用父类构造方法调用父类构造方法缺省是不带参数的构造方法。缺省是不带参数的构造方法。如果需要调用特殊的父类构造方法,则需在如果需要调用特殊的父类构造方法,则需在子类构造方法中第一行通过子类构造方法中第一行通过super( )调用。调用。 class Employee .public Employee( String n)name=n;class Manager entends Emplyeepublic Manager( String s,String
25、 d)super(s);. 35Object Object 及其子类及其子类Object定义了所有对象都需要的状态和行定义了所有对象都需要的状态和行为。如对象之间的比较、将对象转换为字为。如对象之间的比较、将对象转换为字符串、等待某个条件变量、当某条件变量符串、等待某个条件变量、当某条件变量改变时通知相关对象改变时通知相关对象 以及返回对象的类。以及返回对象的类。36在在ObjectObject子类中可以重写的方法:子类中可以重写的方法:cloneclone equalsequalsfinalizefinalize toStringtoString :返回对象的字符串表示,表达的内容因具体的对
26、象而异:返回对象的字符串表示,表达的内容因具体的对象而异 在在ObjectObject子类中不能重写的方法:子类中不能重写的方法:getClassgetClass notifynotify notifyAllnotifyAll waitwait Object Object 及其子类及其子类37Object的clone方法 aCloneableObject aCloneableObject.clone();.clone(); /从已有的对象创建从已有的对象创建新的对象新的对象注意:注意: aCloneableObjectaCloneableObject 必须实现了必须实现了Cloneable接口接口Object.clone()是是shallow copy 而不是而不是 deep copy 38public class Stack p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024不锈钢采购合同范文
- 人教版四年级上册数学第六单元《除数是两位数的除法》测试卷及参考答案(综合卷)
- 北师大版四年级上册数学第一单元 认识更大的数 测试卷含答案【满分必刷】
- 冀教版四年级上册数学第六单元 认识更大的数 测试卷【能力提升】
- 2024年宝马轿跑车合作协议书
- 2024个人承包经营合同
- 2024农民专业合作社社员股份合同书
- 东方电气风电(山东)有限公司联合生产厂房改扩建项目环境影响报告表
- 中国熟食制品行业投资前景分析及未来发展趋势研究报告(智研咨询发布)
- 2024.1.13七上词语专项训练练习试题及答案
- 2024年《军事理论》考试题库附答案(含各题型)
- 湖北省公安厅机场公安局警务辅助人员招聘考试试题及答案
- 2024年通信电子计算机技能考试-中国联通笔试参考题库含答案
- 新修订公司法专题讲座课件
- 中国加速康复外科临床实践指南(2021)解读
- 会计技能大赛实训总结与反思
- 水利风景区项目策划
- 无人机驾驶航空器飞行管理暂行条例(草案)知识考试题库(85题)
- 政务信息宣传培训课件
- 银行营销策略市场调研分析
- 2024年房地产公司设计类技术笔试历年真题荟萃含答案
评论
0/150
提交评论