面向对象的特性.ppt_第1页
面向对象的特性.ppt_第2页
面向对象的特性.ppt_第3页
面向对象的特性.ppt_第4页
面向对象的特性.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

面向对象的特性,目标,有关面向对象的概念 java的类 java的对象 java的面向对象特性 抽象类和接口 inner class 总结,面向对象的概念,面向对象程序设计围绕的几个主要概念: 抽象数据类型、类、类型层次(子类),封装性,继承性、多态性 对象,消息和方法,抽象数据类型,class car int color_number; int door_number; int speed; void brake() void speedup() ; void slowdown() ,抽象数据类型,类,什么是类? 类是描述对象的“基本原型”,它定义一种对象所能拥有的数据和能完成的操作,在面向对象的程序设计中,类是程序的基本单元。 程序中的对象 是类的一个实例,是一个软件单元, 它由一组结构化的数据和 在其上的一组操作构成。,变量:即指对象的所知道的状态 方法:指对象的功能单元。 什么是消息? 软件对象通过相互间传递消息来相互作用和通信 一个消息由三部分组成: 1. 接受消息的对象 2. 要完成方法的名字 3. 方法需要的参数,一个例子 在程序中操作对象是类的一个实例:即对象 创建一个对象 hello obj=new hello(); 调用方法 obj.showstring(“hello world!”),class hello ,private string s;,public void showstring () system.out.println(s); public void changestring(string str) s=str; return s;,封装,什么是封装? 封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。,子类,什么是子类? 子类是作为另一个类的扩充或修正所定义的一个类.,bicycle,(super class),mountain bikes,racing bikes,tandem bikes,sub class,继承,继承是子类利用父类中定义的方法和变量就像它们属于子类本身一样.,class car int color_number; int door_number; int speed; push_break() add_oil() ,class trash_car extends car double amount; fill_trash() ,何时选择继承性,一个很好的经验: “b是一个a吗?” 如果是则让b做a的子类. 常犯的错误:a有一个b吗? 例如让汽车轮子成为汽车的子类是错误的,方法重写(overridden),什么是方法的覆盖(重写)? 在子类中重新定义父类中已有的方法,class car int color_number; int door_number; int speed; push_break() speed=0; add_oil() ,class trash_car extends car double amount; fill_trash() push_break() speed=speed-10; ,多态性(polymorphic),什么是方法的重载(多态性)? 在同一个类中至少有两个方法用同一个名字,但有不同的参数。,类,void show(int int_num),void show(double double_num),void show(nit nit_ um, float float_um),123,1.23,123,1.23,java 类定义,包括类声明和类体 类声明: publicabstract|final class classname extends superclassname implements interfacenamelist ,类体定义如下: class classname public | protected | private static final transient volatile type variablename; /成员变量 public | protected | private static final | abstract native synchronized returntype methodname(paramlist) throws exceptionlist statements /成员方法 ,成员变量,public | protected | private static final transient volatile type variablename; /成员变量 static: 静态变量(类变量;相对于实例变量 final: 常量,成员方法,public | protected | private static final | abstract native synchronized returntype methodname(paramlist) throws exceptionlist /方法声明 statements /方法体 方法声明 static: 类方法,可通过类名直接调用 abstract: 抽象方法,没有方法体 final: 方法不能被重写 native: 集成其它语言的代码 synchronized: 控制多个并发线程的访问,成员方法(值参传递),public class passtest float ptvalue; public static void main(string args) int val; passtest pt=new passtest(); val=11; system.out.println(“original int value is:”+val);,pt.changedint(val); system.out.pringln(“int value after change is:” +val); pt.ptvalue=101f; system.out.println(“original ptvalue is:”+pt.ptvalue); pt.changeobjvalue(pt); system.out.println(“ptvalue after change is:”+pt.ptvalue); ,public void changeint(int value) value=55; public void changeobjvalue(passtest ref) ref.ptvalue=99f; ,方法体包括局部变量的声明以及所有合法的java指令。 局部变量的作用域在该方法内部。 若局部变量与类的成员变量同名,则类的成员变量被隐藏。,class variable int x=0,y=0,z=0; /类的成员变量 void init(int x,int y) this.x=x; this.y=y; int z=5; /局部变量 system.out.println(“* in init*”); system.out.(“x=”+x+“ y=”+y+“ z=”+z) ,public class variabletest public static void main(string args) variable v=new variable(); system.out.println(“*before init*”); system.out.println(“x=”+v.x+ “y=”+ v.y+“z=”+v.z); v.init(20,30); system.out.println(“*after init*”);,system.out.println(“x=”+v.x+ “y=”+ v.y+“z=”+v.z); ,this-用在一个方法中引用当前对象,它的值是调用该方法的对象。 返回值须与返回类型一致,或是其子类 返回类型是接口时,返回值必须实现该接口。,方法重载(method overloading),方法重载指多个方法享有相同的方法名 区别在于:参数类型不同,或个数不同; 返回类型不能用来区分重载的方法。,class methodoverloading void receive(int i) void receive(int x, int y) void receive(double d) void receive(string s) ,public class methodoverloadingtest public static void main(string args) methodoverloading mo=new methodoverloading(); mo.receive(1); mo.receive(2,3); mo.receive(12.56); mo.receive(“very interesting, isnt it?”); ,构造方法,重载经常用于构造方法 构造方法具有和类名相同的名称,而且不返回任何数据类型 构造方法只能由new运算符调用 利用构造方法进行初始化 构造方法不能被继承,class point int x,y; point() x=0; y=0; point(int x, int y) this.x=x; this.y=y; ,finalize()方法,在根类java.land.object中实现 对对象进行垃圾收集前,系统自动调用 自己重写时需要调用父类的finalize()方法, protected void finalize() throws throwable /clean up code for this class super.finalize(); ,java对象,类实例化可生成对象 对象通过消息传递来进行交互 消息传递即激活指定的某个对象的方法以改变其状态或让它产生一定的行为。 public class helloworldapp public static void main(string args) system.out.println(“hello”); ,对象的生命周期,生成 使用 清除,包括声明、实例化和初始化 格式: type objectname=new type(paramlist); (1)声明:type objectname 声明并不为对象分配内存空间,而只是分配一个引用空间; (2)实例化:运算符new为对象分配内存空间,它调用对象的构造方法,返回引用;一个类的不同对象分别占据不同的内存空间。,(3)生成:执行构造方法,进行初始化;根据参数不同调用相应的构造方法。 对象的引用指向一个中间的数据结构,它存储有关数据类型的信息以及当前对象所在的堆的地址,而对于对象所在的实际的内存地址是不可操作的,这就保证了安全性。 通过运算符“.”可以实现对变量的访问和方法的调用。 设定访问权限来限制其它对象对它的访问,调用对象的变量,格式:objectreference.variable

温馨提示

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

评论

0/150

提交评论