Java面向对象特性课件

上传人:文**** 文档编号:244583268 上传时间:2024-10-05 格式:PPT 页数:39 大小:178KB
返回 下载 相关 举报
Java面向对象特性课件_第1页
第1页 / 共39页
Java面向对象特性课件_第2页
第2页 / 共39页
Java面向对象特性课件_第3页
第3页 / 共39页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第四章,Java,面向对象特性,对象,与类,对象生命周期,类的创建,重载,子类,1,对象的基本概念,面向对象程序语言三个关键特点:,封装 (,Encapsulation ),多态 (,Polymorphism ),继承 (,Inheritance ),2,基本数据类型和聚集类型的变量与一些操作,(如+, -)之间不需特殊的联系。,在面向对象语言中,在数据类型的声明与操作,这些数据的代码声明之间建立紧密联系,这种,联系通常描述为一种抽象数据类型。,在,Java,中,抽象数据类型的概念用类来实现。,抽象数据类型,3,类和对象,类是特定类型对象的定义,包括:对象包含的,数据,对象的创建及对象对自身数据操作的方法。,类是一个模板。,对象是在其类模型基础上构造出的,是具体的,实例。,4,类和对象举例,类定义:,Class,EmpInfo,String name;,String designation;,String department;,void print( ) System.out.,println,(name+“is”+,designation+“at”+department);,对象的生成与使用:,EmpInfo,employee = new,EmpInfo,( );,employee.name = “ Robert,Javaman,”;,employee.designation = “Manager”;,employee.department = “Coffee shop”;,employee.print( ); .,5,对象生命周期,创建对象,使用对象,清除不用的对象,6,创建对象,例:,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),7,对象实例化过程,构造与初始化对象的过程(调用,new,Xxxx,():,开辟内存空间(变量、方法体代码)及类成员 变量的初始化:,数值型:0; 布尔型:,false;,引用型:,null;,字符串型:,null;,显式初始化:执行类成员声明时带有的简单 赋值表达式。,public class Initialized,private,int,x = 5 ;,private String name = “Fred”;,执行构造函数。,8,对象的回收,垃圾收集机制(,garbage collection):Java,运行环境当确定,某个对象不再被使用时,将其删除。,一个对象在没有引用指向它时,可作为垃圾收集。,垃圾搜集器:,Java,运行环境中的垃圾搜集器周期性地释放,不用对象占用的空间。,9,垃圾收集机制,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,c,/,a,使用完,将其删除,delete a;,/,a,使用完,将其删除,a= null ;,10,类的,创建,11,构造方法定义:,public,类名(参数) ,注意:,方法名必须与类名相同。,不能带返回类型。,类的,构造函数,12,如果在类定义中无构造函数,,Java,在编译时,可缺省加入构造方法。如,public Employee( ) ;,一旦在类中有一个自己声明的构造函数,则缺省,的构造函数将不被加到源程序中。,缺省构造函数,13,类成员方法定义,一般格式:,()throws ,方法是传值的,方法调用不会改变参数的值。,当对象作为参数时,参数的值是该对象的引用,,这时对象的内容可以在方法中改变,但是对象的,引用不会改变。,14,举例,Public class,PassTest,float,ptValue,;,public void,changeInt,(,int,value),value = 55 ; ,public 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”);,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 : 11,Str,Value is : hello,pt value is : 99.0f,15,数据隐藏与封装,数据隐藏:使用,private,定义的成员变量,只能,在成员方法中使用,其它方法中禁止使用。,优点:,保证对象中数据的一致性。,封装:基本数据和对数据进行的操作方法的结合。,优点:,隐藏类中具体实现的细节。,强迫程序员使用统一的接口访问数据。,使代码可维护性好。,16,数据隐藏与封装举例,Class Date,private,int,day, month, year;,void,setDate,(,int,a,int,b,int,c),day = a;,month = b;,year = c ;,Date d1;,d1.new Date( );,d1.,setDate,(30,9,2001);,.,d1.day = 30;(,错误!),17,“,this “,引用,关键字,this,用来指向当前对象本身。,例:,class Date ,private,int,day, month,year;,public Date,getTommorrow,( ),this.day+;,18,重载(,Overloading),含义:在同一个类中一个方法名被用来定义多个,方法。,classScreen,public void print(,int,i) ,public void print( float i) ,public void print( String,str,) ,重载必须遵守原则:,参数表必须不同,以此区分不同方法体。,返回类型、修饰符可相同或不相同。,19,激活重载的构造函数,在一个构造函数中可以利用另一个构造函数。,class Employee,private String name;,private,int,salary;,public Employee(String n,int,s),name = n ;,salary = s;,public Employee( String n) this(n,0); ,public Employee( ) this(“Unknown”); ,20,子类,子类表示类之间一种,“,属于,”,(,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,jobTitle,;,int,grade ;,String department ;,Employee subordinates,;,21,Java,中用,extends,关键字定义子类。,Extends,关键字,public class,Employee,String name ;,Date,hireDate,;,Date,dateofBirth,;,String,jobTitle,;,int,grade ;,子类是从已有的类创建新类的一种方法。,public class,Manager,extends,Employee,String department ;,Employee subordinates,;,22,子类,子类继承父类的属性、功能(方法),子类中只,需声明特有的东西。,带,private,修饰符的属性、方法是不能被继承的。,构造函数不能被继承。,在方法中调用构造方法用,this()。,调用父类的构造方法用,super()。,- super,指向该关键字所在类的父类。,23,构造不同类型数据的集合,Java,中允许构造如下类型的数组:,Employee staff = new Employee1024;,staff0 = new Manager( );,staff1 = new Worker();,staff2 = new Employee();,- staff,是由多种类型的对象组成的。,Java,中任何一个子类的实例都可作为父类的实例,使用,可以调用父类具有的方法。,24,单继承,Java,是单继承的,即只能从一个类继承,,extends,后,类名只能有一个。,单继承的优点:,代码更可靠,可以用接口弥补,用一个类实现多个接口,达到多继承效果。,25,重写(,Overriding methods),子类可以改变从父类继承的行为。,被重写方法的返回值、方法名、参数列表要,与父类中的方法完全一样。,26,Overriding,示例,public class Stack,private Vector items;,/ code for Stacks methods and constructor not shown,/ 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,();,27,方法重写的规则,必须返回与原来方法完全相同的返回值。,方法的访问权限不能缩小。,不能抛出新的例外。,28,多 态,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.,29,Java,允许父类对象的变量作为子类对象的变量 使用。,如:,Employee e = new Manager( );,但通过该变量(如,e),只能访问父类的方法,子类特有的部分被隐藏。,运行时确定使用父类还是子类的方法。,Employee e = new Manager();,e.,getDetails,();,多 态,30,Super,关键字,Super,指向该关键字所在类的父类。,Public class,Empolyee,private String name ;,private,int,salary;,public String,getDetails,( ),return “Name: ”+name+“,nSalary,:”+salary;,public class Manager extends,Empolyee,private String department ;,public String,getDetails,( ),return,super,.,getDetailes,( )+,nDepartment,: “+,department;,31,“,instanceof,”,及,类型强制转换,Instanceof,测试对象类型,Empolyee,a = new Manager();,则,a,instanceof,Manager,为,true;,类型转换,父类弱、子类强,指向父类的引用不能直接按子类引用,,必须要强制类型转换后才能作为子类的引用使用。,例:,public void method( Employee e),if (e,instanceof,Manager),Manager m = (Manager) e ;,m.department = “”;,32,子类对象的初始化,初始化对象是很结构化的。,在对对象初始化时,分三步:,分配空间,并初始化为,“,0,”,值。,按继承关系从顶向下显式初始化。,按继承关系从顶向下调用构造函数。,33,调用父类构造方法,缺省是不带参数的构造方法。,如果需要调用特殊的父类构造方法,则需在,子类构造方法中第一行通过,super( ),调用。,class Employee .,public Employee( String n),name=n;,class Manager,entends,Emplyee,public Manager( String s,String d),super(s);,. ,34,Object,及其子类,Object,定义了所有对象都需要的状态和行为。如对象之间的比较、将对象转换为字符串、等待某个条件变量、当某条件变量改变时通知相关对象,以及返回对象的类。,35,在,Object,子类中可以重写的方法:,clone,equals,finalize,toString,:,返回对象的字符串表示,表达的内容因具体的对象而异,在,Object,子类中不能重写的方法:,getClass,notify,notifyAll,wait,Object,及其子类,36,Object,的,clone,方法,aCloneableObject,.clone();,/,从已,有的对象创建新的对象,注意:,aCloneableObject,必须实现了,Cloneable,接口,Object.clone(),是,shallow copy,而不是,deep,copy,37,public class Stack,implements,Cloneable,private Vector items;,/,code for Stacks methods and constructor not shown,protected Object clone() ,try ,Stack s = (Stack)super.clone(); / clone the stack,s.items = (Vector)items.clone(); / clone the vector,return s; / return the clone, catch (,CloneNotSupportedException,e) ,Object,的,clone,方法,38,Object,的,toString,方法,返回对象的字符串表示,表达的内容因具体的对象而异,。,例:,System.out.,println,(Thread.,currentThread,().,toString,();,对于,Integer,的对象是所包含的整型数的字符表示。,Threadmain,5,main,39,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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