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