《第04章 面向对象编程.ppt》由会员分享,可在线阅读,更多相关《第04章 面向对象编程.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第四章第四章 面向对象编程面向对象编程 类与构造函数类与构造函数 继承继承的实现的实现 thisthis与与supersuper 方法的覆盖方法的覆盖 方法的重载方法的重载本本 章章 要要 点点2023/1/142面向对象编程与面向过程编程的区别面向对象编程与面向过程编程的区别l过程化程序设计先确定算法,再确定数据过程化程序设计先确定算法,再确定数据结构;面向对象编程先确定数据结构,再结构;面向对象编程先确定数据结构,再确定运算。确定运算。l面向过程编程的程序员,习惯于建立数据面向过程编程的程序员,习惯于建立数据结构存放数据并定义方法(函数)来操作结构存放数据并定义方法(函数)来操作数据;面向
2、对象编程的程序员则构造一个数据;面向对象编程的程序员则构造一个对象模型,将数据与方法组织在一起。对象模型,将数据与方法组织在一起。2023/1/143知识回顾知识回顾l我们可以把现实世界的事物抽象成对象。我们可以把现实世界的事物抽象成对象。l对象一般都有两个特征:状态(对象一般都有两个特征:状态(state)和)和行为(行为(behavior)。)。l软件的对象概念是由现实世界对象抽象而软件的对象概念是由现实世界对象抽象而来来。把现实世界对象的状态保存在软件对。把现实世界对象的状态保存在软件对象的变量中;现实世界对象的行为通过软象的变量中;现实世界对象的行为通过软件对象的方法(函数)来实现。件
3、对象的方法(函数)来实现。2023/1/144知识回顾知识回顾l把相似的对象划归成一个类。把相似的对象划归成一个类。l在软件中,类,就是一个模板,它定义了在软件中,类,就是一个模板,它定义了通用于一个特定种类的所有对象的状态通用于一个特定种类的所有对象的状态(变量)和行为(方法)。(变量)和行为(方法)。l类是创建对象的模板,对象是类的实例。类是创建对象的模板,对象是类的实例。2023/1/145知识回顾知识回顾l从程序设计的角度看,类是面向对象程序从程序设计的角度看,类是面向对象程序中最基本的程序单元。类实质上定义的是中最基本的程序单元。类实质上定义的是一种数据类型,这种数据类型就是对象类一
4、种数据类型,这种数据类型就是对象类型。所以我们可以使用类名称来声明对象型。所以我们可以使用类名称来声明对象变量。变量。l声明对象变量之后,还不能使用对象。必声明对象变量之后,还不能使用对象。必须用运算符须用运算符new创建对象实体之后,才能创建对象实体之后,才能使用对象。使用对象。2023/1/146面向对象编程的难点面向对象编程的难点l掌握面向对象的困难之处在于思路的转换。掌握面向对象的困难之处在于思路的转换。l l我们通常习惯于考虑解决问题的方法,而我们通常习惯于考虑解决问题的方法,而不是考虑将问题抽象成对象再去解决它。不是考虑将问题抽象成对象再去解决它。2023/1/147一个简单的例子
5、一个简单的例子l编写一个驾驶汽车的方法编写一个驾驶汽车的方法l面向过程的程序设计:面向过程的程序设计:编写一个方法,编写一个方法,void drivecar();l面向对象的程序设计:面向对象的程序设计:将一辆汽车看成一个对象,将所有汽车对象将一辆汽车看成一个对象,将所有汽车对象的共性抽取出来,设计一个类的共性抽取出来,设计一个类Car,类中有一,类中有一个方法个方法void drive(),用,用Car这个类实例化一个这个类实例化一个具体的对象具体的对象car,调用:,调用:car.drive()。2023/1/148JavaJava的常用包的常用包ljava.applet:包含一些用于创建
6、:包含一些用于创建Java小应用程小应用程序的类。序的类。ljava.awt:包含一些用于编写与平台无关的图形:包含一些用于编写与平台无关的图形界面界面(GUI)应用程序的类。应用程序的类。ljava.io:包含一些用作输入输出:包含一些用作输入输出(I/O)处理的类。处理的类。ljava.lang:包含一些:包含一些Java语言的基本类与核心语言的基本类与核心类,如类,如String、Math、Integer、System和和Runtime,提供常用的功能,这个包中的所有类,提供常用的功能,这个包中的所有类是被隐式导入的。是被隐式导入的。:包含用于建立网络连接的类,与:包含用于建立网络连接的
7、类,与java.io同时使用完成与网络有关的读写。同时使用完成与网络有关的读写。ljava.util:包含一些实用工具类和数据结构类。:包含一些实用工具类和数据结构类。2023/1/14101 1、类的定义、类的定义l修饰符修饰符 class 类名类名extends 父类名父类名 implements 接口名接口名ll 类型类型 成员变量成员变量;l l 修饰符修饰符 类型类型 成员方法(参数列表)成员方法(参数列表)l l 类型类型 局部变量局部变量;l 方法体方法体;l l l2023/1/14112 2、构造函数、构造函数l构造函数是类的一种特殊方法:构造函数是类的一种特殊方法:构造函数
8、的方法名与类名相同;构造函数的方法名与类名相同;构造函数没有返回值;构造函数没有返回值;构造函数的主要作用是完成类对象的初始化工作;构造函数的主要作用是完成类对象的初始化工作;构造函数一般不能由编程人员显式地直接调用,必构造函数一般不能由编程人员显式地直接调用,必须通过须通过new关键字来自动调用,从而创建类的实例关键字来自动调用,从而创建类的实例lJava的类都要求有构造函数,如果没有定义构的类都要求有构造函数,如果没有定义构造函数,造函数,Java编译器会为我们提供一个缺省的编译器会为我们提供一个缺省的构造函数,也就是不带参数的构造函数。构造函数,也就是不带参数的构造函数。l一个命令:一个
9、命令:Javap Point2023/1/14122 2、构造函数、构造函数-例题例题lUsePhoneCard.javalTestPerson.java2023/1/14133 3、newnew关键字的作用关键字的作用l为对象分配内存空间。为对象分配内存空间。l引起对象构造方法的调用。引起对象构造方法的调用。l为对象返回一个引用。为对象返回一个引用。2023/1/14144 4、缺省构造函数、缺省构造函数成员变量类型成员变量类型 取值取值 byte0 short0 int 0 long0L charu00000 float0.0F double0.0D booleanfalse 所有引用类型
10、所有引用类型null 当我们用当我们用缺省的构缺省的构造函数初造函数初始化对象始化对象时,系统时,系统用默认值用默认值初始化对初始化对象的成员象的成员变量。变量。2023/1/14151 1、方法的重载(、方法的重载(overloadoverload)l特点:特点:同一名字同一名字不同数目的参数不同数目的参数不同类型的参数不同类型的参数lJava中使用了大量的方法重载。重载是一中使用了大量的方法重载。重载是一个非常重要的部分,它是面向对象理论的个非常重要的部分,它是面向对象理论的重要基础之一重要基础之一2023/1/14171 1、方法的重载(、方法的重载(overloadoverload)l
11、构造函数的重载构造函数的重载同一个类中存在着若干个具有不同参数列表同一个类中存在着若干个具有不同参数列表的构造函数的构造函数当一个类因构造函数的重载而存在着若干个当一个类因构造函数的重载而存在着若干个构造函数时,创建该类对象的语句会自动根据构造函数时,创建该类对象的语句会自动根据给出的实际参数的数目、类型和顺序来确定调给出的实际参数的数目、类型和顺序来确定调用哪个构造函数来完成对新对象的初始化工作用哪个构造函数来完成对新对象的初始化工作2023/1/14182 2、特殊变量、特殊变量thisthislthis变量代表对象本身变量代表对象本身l当类中有两个同名变量,一个属于类(类当类中有两个同名
12、变量,一个属于类(类的成员变量),而另一个属于某个特定的的成员变量),而另一个属于某个特定的方法(方法中的局部变量),使用方法(方法中的局部变量),使用this区区分成员变量和局部变量。分成员变量和局部变量。l使用使用this简化构造函数的调用。简化构造函数的调用。2023/1/14192 2、特殊变量、特殊变量thisthisl关于实例方法和实例数据成员的说明关于实例方法和实例数据成员的说明 一个类所有的实例(对象)调用的成员方法一个类所有的实例(对象)调用的成员方法在内存中只有一份拷贝,尽管在内存中可能有在内存中只有一份拷贝,尽管在内存中可能有多个对象,而数据成员在类的每个对象所在内多个对
13、象,而数据成员在类的每个对象所在内存中都存在着一份拷贝。存中都存在着一份拷贝。this变量允许相同的实例方法为不同的对象变量允许相同的实例方法为不同的对象工作。每当调用一个实例方法时,工作。每当调用一个实例方法时,this变量将变量将被设置成引用该实例方法的特定的类对象。方被设置成引用该实例方法的特定的类对象。方法的代码接着会与法的代码接着会与this所代表的对象的特定数所代表的对象的特定数据建立关联。据建立关联。2023/1/14203 3、关键字、关键字staticstaticl静态方法和静态变量是属于某一个类,而静态方法和静态变量是属于某一个类,而不属于类的对象。不属于类的对象。l静态方
14、法和静态变量的引用直接通过类名静态方法和静态变量的引用直接通过类名引用。引用。l在静态方法中不能调用非静态的方法和引在静态方法中不能调用非静态的方法和引用非静态的成员变量。反之,则可以。用非静态的成员变量。反之,则可以。l可以用类的对象可以用类的对象obj去调用静态的方法去调用静态的方法method(),如:,如:obj.method()。2023/1/14214 4、常量的定义、常量的定义l使用关键字使用关键字final定义常量,例如:定义常量,例如:final double PI=3.1415926;l作为一种约定,在定义常量时,通常采用作为一种约定,在定义常量时,通常采用大写形式。大写形
15、式。lfinal常量可以在声明的同时赋初值,也可常量可以在声明的同时赋初值,也可以在构造函数中赋初值。以在构造函数中赋初值。l为了节省内存,我们通常将常量声明为静为了节省内存,我们通常将常量声明为静态的(态的(static)。)。2023/1/14225 5、类的继承、类的继承l理解继承是理解面向对象程序设计的关键。理解继承是理解面向对象程序设计的关键。l在在Java中,通过关键字中,通过关键字extends继承一个继承一个已有的类,被继承的类称为父类(超类,已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类)。基类),新的类称为子类(派生类)。l在在Java中,不允许多继承。
16、中,不允许多继承。2023/1/14235 5、类的继承、类的继承2023/1/14246 6、方法的覆盖(、方法的覆盖(overrideoverride)l在子类中定义一个与父类同名、返回类型、在子类中定义一个与父类同名、返回类型、参数类型均相同一个方法,称为方法的覆参数类型均相同一个方法,称为方法的覆盖盖l覆盖发生在子类与父类之间。覆盖发生在子类与父类之间。lTestOverload.javalTestHiddenField.java2023/1/14257 7、特殊变量、特殊变量supersuperl特殊变量特殊变量super,提供了对父类的访问。,提供了对父类的访问。l可以使用可以使用
17、super访问父类被子类隐藏的变量访问父类被子类隐藏的变量或覆盖的方法。或覆盖的方法。l每个子类构造方法的第一条语句,都是隐每个子类构造方法的第一条语句,都是隐含地调用含地调用super(),如果父类没有这种形式,如果父类没有这种形式的构造函数,那么在编译的时候就会报错。的构造函数,那么在编译的时候就会报错。2023/1/14268 8、多态性、多态性l多态指一个程序中同名的不同方法共存的多态指一个程序中同名的不同方法共存的情况情况方法的覆盖方法的覆盖方法的重载方法的重载l方法覆盖要求子类与父类的方法一模一样,方法覆盖要求子类与父类的方法一模一样,否则就是方法重载!否则就是方法重载!l通过覆盖
18、父类的方法来实现,在运行时根通过覆盖父类的方法来实现,在运行时根据传递的对象引用,来调用相应的方法。据传递的对象引用,来调用相应的方法。2023/1/14278 8、多态性、多态性-例题例题lTestOverride.javalConstructorOverride.java2023/1/14289 9、面向对象的程序设计、面向对象的程序设计l问题:求一个长方形的周长和面积。问题:求一个长方形的周长和面积。l以面向过程的程序设计方式思考:以面向过程的程序设计方式思考:1、确定长方形周长和面积的算法。、确定长方形周长和面积的算法。2、编写两个方法(函数)分别计算长方形的、编写两个方法(函数)分别
19、计算长方形的周长和面积。周长和面积。3、求周长的方法(函数)和求面积的方法、求周长的方法(函数)和求面积的方法(函数)需要两个参数,分别是长方形的长和(函数)需要两个参数,分别是长方形的长和宽。宽。2023/1/14299 9、面向对象的程序设计、面向对象的程序设计lclass Rectanglell static int perimeter(int length,int width)l lreturn 2*(length+width);l l static int area(int length,int width)l lreturn length*width;l l public stat
20、ic void main(String args)l lSystem.out.println(perimeter=“+Rectangle.perimeter(5,4);lSystem.out.println(area=“+Rectangle.area(5,4);l l2023/1/14309 9、面向对象的程序设计、面向对象的程序设计l问题:求一个长方形的周长和面积。问题:求一个长方形的周长和面积。l以面向对象的程序设计方式思考:以面向对象的程序设计方式思考:1、一个长方形可以看成一个长方形对象。、一个长方形可以看成一个长方形对象。2、一个长方形对象有两个状态(长和宽)和、一个长方形对象有两个状态(长和宽)和两个行为(求周长和求面积)。两个行为(求周长和求面积)。3、将所有长方形的共性抽取出来,设计一个、将所有长方形的共性抽取出来,设计一个长方形类。长方形类。4、通过长方形对象的行为,就可以求出某个、通过长方形对象的行为,就可以求出某个具体的长方形对象的周长和面积。具体的长方形对象的周长和面积。2023/1/1431阅读程序阅读程序lSquareInt.javalMaximum.javalRandomInt.javalRollDie.java2023/1/1432