
Java的面向对象编程 ppt
23页单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,的,面向对象编程,主讲人:孙鑫,http:/,www.sunxin.org,面向对象编程概述,简单的说,面向对象编程(,Object Oriented Programming,,,简称,OOP,),描述的是对象之间的相互作用面向对象编程与面向过程编程的区别:,过程化程序设计先确定算法,再确定数据结构;面向对象编程先确定数据结构,再确定运算面向过程编程的程序员,习惯于建立数据结构存放数据并定义方法(函数)来操作数据;面向对象编程的程序员则构造一个对象模型,将数据与方法组织在一起http:/,www.sunxin.org,对象 对象的状态 对象的行为,我们可以把现实世界的事物抽象成对象对象一般都有两个特征:状态(,state,),和行为(,behavior,)软件的对象概念是由现实世界对象抽象而来,把现实世界对象的状态保存在软件对象的变量中;现实世界对象的行为通过软件对象的方法(函数)来实现http:/,www.sunxin.org,类和,对象,把相似的对象划归成一个类在软件中,类,就是一个模板,它定义了通用于一个特定种类的所有对象的状态(变量)和行为(方法)。
类是创建对象的模板,对象是类的实例http:/,www.sunxin.org,面向对象程序设计,从程序设计的角度看,类是面向对象程序中最基本的程序单元类实质上定义的是一种数据类型,这种数据类型就是对象类型,所以我们可以使用类名称来声明对象变量声明对象变量之后,还不能使用对象必须用运算符,new,创建对象实体之后,才能使用对象http:/,www.sunxin.org,面向对象编程的难点,掌握面向对象的困难之处在于思路的转换我们通常习惯于考虑解决问题的方法,而不是考虑将问题抽象成对象再去解决它http:/,www.sunxin.org,一个简单的例子,编写一个驾驶汽车的方法,面向过程的程序设计:,编写一个方法,,void,drivecar,();,面向对象的程序设计:,将一辆汽车看成一个对象,将所有汽车对象的共性抽取出来,设计一个类,Car,,,类中有一个方法,void drive(),,用,Car,这个类实例化一个具体的对象,car,,,调用:,car.drive(),http:/,www.sunxin.org,类的构造方法,构造方法的名字和类名相同,并且没有返回值构造方法主要用于为类的对象定义初始化状态。
我们不能直接调用构造方法,必须通过,new,关键字来自动调用,从而创建类的实例Java,的类都要求有构造方法,如果没有定义构造方法,,Java,编译器会为我们提供一个缺省的构造方法,也就是不带参数的构造方法http:/,www.sunxin.org,new,关键字的作用,为对象分配内存空间引起对象构造方法的调用为对象返回一个引用http:/,www.sunxin.org,缺省构造方法,当我们用缺省的构造方法初始化对象时,系统用默认值初始化对象的成员变量各种数据类型的默认值为:,数值型,0,boolean,false,char0,对象,null,http:/,www.sunxin.org,方法的重载,(overload),重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能构成方法的重载http:/,www.sunxin.org,特殊变量,this,this,变量代表对象本身,当类中有两个同名变量,一个属于类(类的成员变量),而另一个属于某个特定的方法(方法中的局部变量),使用,this,区分成员变量和局部变量使用,this,简化构造函数的调用http:/,www.sunxin.org,特殊变量,this,关于实例方法和实例数据成员的进一步说明,一个类所有的实例(对象)调用的成员方法在内存中只有一份拷贝,尽管在内存中可能有多个对象,而数据成员在类的每个对象所在内存中都存在着一份拷贝。
this,变量允许相同的实例方法为不同的对象工作每当调用一个实例方法时,,this,变量将被设置成引用该实例方法的特定的类对象方法的代码接着会与,this,所代表的对象的特定数据建立关联http:/,www.sunxin.org,关键字,static,静态方法和静态变量是属于某一个类,而不属于类的对象静态方法和静态变量的引用直接通过类名引用在静态方法中不能调用非静态的方法和引用非静态的成员变量反之,则可以可以用类的对象,obj,去调用静态的方法,method(),,,如:,obj.method,(),http:/,www.sunxin.org,常量的定义,使用关键字,final,定义常量,例如:,final double PI=3.1415926;,作为一种约定,在定义常量时,通常采用大写形式final,常量可以在声明的同时赋初值,也可以在构造函数中赋初值为了节省内存,我们通常将常量声明为静态的(,static,)http:/,www.sunxin.org,类的继承,理解继承是理解面向对象程序设计的关键在,Java,中,通过关键字,extends,继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。
在,Java,中,不允许多继承http:/,www.sunxin.org,方法的覆盖(,override,),在子类中定义一个与父类同名、返回类型、参数类型均相同一个方法,称为方法的覆盖覆盖发生在子类与父类之间http:/,www.sunxin.org,特殊变量,super,特殊变量,super,,,提供了对父类的访问可以使用,super,访问父类被子类隐藏的变量或覆盖的方法每个子类构造方法的第一条语句,都是隐含地调用,super(),,,如果父类没有这种形式的构造函数,那么在编译的时候就会报错http:/,www.sunxin.org,多态性,通过覆盖父类的方法来实现,在运行时根据传递的对象引用,来调用相应的方法http:/,www.sunxin.org,面向对象的程序设计,问题:求一个长方形的周长和面积以面向过程的程序设计方式思考:,1,、确定长方形周长和面积的算法2,、编写两个方法(函数)分别计算长方形的周长和面积3,、求周长的方法(函数)和求面积的方法(函数)需要两个参数,分别是长方形的长和宽http:/,www.sunxin.org,面向过程的程序设计代码:,class Rectangle,static,int,perimeter(int,length,int,width),return 2*(length+width);,static,int,area(int,length,int,width),return length*width;,public static void main(String,args,),System.out.println(perimeter,=“+Rectangle.perimeter(5,4);,System.out.println(area,=“+Rectangle.area(5,4);,http:/,www.sunxin.org,面向对象的程序设计,问题:求一个长方形的周长和面积。
以面向对象的程序设计方式思考:,1,、一个长方形可以看成一个长方形对象2,、一个长方形对象有两个状态(长和宽)和两个行为(求周长和求面积)3,、将所有长方形的共性抽取出来,设计一个长方形类4,、通过长方形对象的行为,就可以求出某个具体的长方形对象的周长和面积http:/,www.sunxin.org,面向对象的程序设计,Demo,http:/,www.sunxin.org,。