面向对象程序设计.ppt_第1页
面向对象程序设计.ppt_第2页
面向对象程序设计.ppt_第3页
面向对象程序设计.ppt_第4页
面向对象程序设计.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

,第五章 面向对象程序设计 成都东软信息技术学院 计算机系 黄伟,Beyond Technology,C7201 Email:,内容提醒,5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法及其使用和对象数组 5.4 类的继承和多态 5.5 包和访问控制符 5.6 接口,5.2.2 构造方法(Constructor Method) 在创建对象的同时,调用这个对象所属类的构造方法来完成对象的实例化(内存分配)。 构造方法的形式如下: public 类名( 参数 ) 语句体 其中的语句体为初始化实例变量的赋值语句,可以使用参数值作为变量的初值,也可以直接给变量赋具体的数值。,构造对象实例(类的实例化)的过程: (1)根据需要将类加载到内存中。 (2)新对象分配内存空间,用缺省值初始化实例变量。 (3)执行显式初始化(int a = 10;)。 (4)执行构造方法。变量的值重置或者在构造方法中设置。 (5)把对象的一个引用值存储在变量中。,构造方法具有以下几个的特点: (1)构造方法的方法名与其所在类的名称相同。 (2)虽然构造方法没有返回值,但是也不能有void关键字。 (3)构造方法的修饰符总是public。 (4)构造方法的主要作用是构造类的对象。,可以为People类增加一个如下所示的构造方法 public People() name = “沈昕“; age = 26; gender = F; height = 1.62; weight = 55.5; 在上面的构造方法中,一共给5个实例变量赋了初值。 当调用该构造方法时,就可以完成对5个实例变量的初始化。,如果希望在创建对象时,其实例变量具有不同的初值,可以通过传递参数并将参数值赋给实例变量的方法来实现。 构造方法的参数要与实例变量(不一定)一 一对应 例如:People类的另一种构造方法为: public People( String initName, int initAge, char initGender, double initHeight, double initWeight ) name = initName; age = initAge; gender = initGender; height = initHeight; weight = initWeight; 一般情况下,一个类中可以有一个或者多个构造方法,它们的方法名称相同但是参数不同,相当于方法的重载。我们将在后面具体介绍方法重载。,除了构造方法外,类中还有许多描述类行为的方法,这些方法可以分为实例方法和静态方法两种。 1实例方法 它属于每个对象,只能通过类的对象调用。 实例方法用来定义某个类的行为,也就是说类的对象所能进行的操作。 例如:在People类中,我们可以定义一个setName()方法用来改变People类某个对象的姓名,该方法内容如下。 public void setName( String newName ) name = newName; ,2静态方法 与静态变量类似,静态方法的本质是属于整个类的,而不属于某个实例对象。 因为静态方法属于类本身,所以只要定义了类,就可以直接使用类来调用。 在使用静态方法时要注意以下几个问题: (1)使用static修饰的静态方法是属于某个类的,它在内存空间中的内容将随着类的加载而进行分配和装载,不被任何一个对象所单独拥有。 (2)静态方法不能操纵和处理属于某个对象的实例变量,也不能访问同一个类的静态方法。而只能处理属于整个类的静态变量,也就是说静态方法只能处理静态变量或者调用静态方法。,(3)因为静态方法不能访问实例变量,所以在静态方法中不能使用关键字this。 (4)需要调用某个静态方法时,可以使用其所属的类的名称直接调用,也可以用类的某个具体的对象名调用,其形式为: 类名.静态方法名; 或者 对象名.静态方法名;,以下是People类完整代码: public class People /变量定义 static String nation; /静态变量 public String name; /实例变量 public People() /第一种构造方法 name=“沈昕”; public People(String sName) /第二种构造方法(带参数的构造方法) name=sName; public void setName(String newName) /实例方法 name=newName; static void setNation(String newNation) /静态方法 nation=newNation; ,5.3 方法的使用和对象数组,5.3.1 调用方法 在完成类程序的编写后,就可以在其他程序中创建该类的对象,并调用该类的实例方法。注意,类的程序和使用类的程序要保存在同一个目录下。 1调用构造方法 如果在定义类对象时没有定义任何构造方法,系统会自动产生一个构造方法,无需定义,称为默认构造方法。默认构造方法不带任何形式的参数,并且方法体为空。 例如,如果上面的People类没有定义构造方法,则系统产生的默认构造方法如下: People() ,5.3 方法的使用和对象数组,5.3.1 调用方法 如果要使用People类的构造方法创建People类对象,则必须使用关键字new,例如,下面两种方法都可以定义People类的对象。 People p1, p2; p1 = new People(); p2 = new People(); 或者 People p1 = new People(); /常用 People p2 = new People(); /常用,5.3 方法的使用和对象数组,5.3.1 调用方法 图5.4 使用第一种构造方法创建对象,图5.4 使用第一种构造方法创建对象,5.3 方法的使用和对象数组,5.3.1 调用方法 如果使用People类中带有参数的第二种构造方法,则可以创建实例变量不相同的对象。例如,使用下面的语句创建对象p1和p2,其实例变量示意图如图5.5所示。 People p1 = new People( “沈昕“, 26, F, 1.62, 55.5 ); People p2 = new People( “宁普“, 17, M, 1.82, 75.2 );,5.3 方法的使用和对象数组,图5.5 使用第二种构造方法创建对象,5.3.1 调用方法 当然我们也可以使用带有参数的构造方法创建一个对象,再使用不带参数的构造方法创建另一个对象。例如,使用下面的语句创建对象p1和p2,其实例变量示意图如图5.6所示。 People p1 = new People(); People p2 = new People( “肖琳“, 48, F, 1.55, 41.8 );,图5.6 两种构造方法混合使用创建对象,5.3 方法的使用和对象数组,5.3.1 调用方法 2调用实例方法 在调用某个类中的实例方法之前,要先创建该类的对象,然后通过该对象并且使用符号“.”来调用所要访问的实例方法。 例如,下面是某个程序中的两条语句。 People p1 = new People(); p1.setName( “李芳“ );,5.3 方法的使用和对象数组,5.3.1 调用方法 3toString()方法 在Java语言中toString()方法是一个具有特殊含义的方法,一般用一个字符串来描述对象的信息。使用System.out.println()方法来打印对象的信息时,不需要明确地调用toString()方法,只要写出对象的名称即可。 例如:假设在应用程序中,已经创建了两个Rectangle类的对象r1和r2,则显示其具体信息的打印语句可以写为: System.out.println( “第一个矩形的信息:“ + r1 ); System.out.println( “第二个矩形的信息:“ + r2 );,3toString()方法 当遇到对象名r1和r2时,系统会自动调用其相应的toString()方法,打印的效果与下面的打印语句完全相同。 System.out.println( “第一个矩形的信息:“ + r1.toString() ); System.out.println( “第二个矩形的信息:“ + r2.toString() ); Java语言提供的大多数类都具有toString()方法,用户可以直接调用,而不需要自行编写额外的语句来显示对象的信息。 也就是说,Java语言会为每一个类自动生成一个toString()方法,但开发人员所编写的toString()方法将覆盖Java语言所自动生成的toString()方法。,5.3 方法的使用和对象数组,5.3.2 访问方法 1修饰符public和private 对于类中的实例变量和实例方法,一般使用修饰符public或者private。 (1)public:表示该实例变量或者实例方法可以在其所在的类的内部或者外部被访问和调用。 (2)private:表示该实例变量或者实例方法只可以在其所在的类的内部被访问和调用。 如果我们定义实例变量为public,则可以通过对象直接修改该变量。如果实例变量的修饰符为private,则必须在其所在类中添加一个实例方法来修改变量的值。 大多数情况下,我们定义实例方法为public。 大多数情况下,我们定义实例变量为private。 (要根据实际需要而定),5.3 方法的使用和对象数组,5.3.2 访问方法 1修饰符public和private 实例变量举例 private String name; /只能在类的内部调用 实例方法举例 public void setName() /类的内部或者外部被访问和调用 ,5.3 方法的使用和对象数组,5.3.2 访问方法 2访问方法 访问方法(Accessor Method)是类中一种可以修改和获取private实例变量值的实例方法。 Getter Setter 为了与其他实例方法区别,一般使用set或者get再加实例变量名称作为该方法的名称。比如,setName()表示修改实例变量name的值;getHeight()表示获取实例变量height的值。该方法如果要可以在类外访问,修饰符为public。,5.3 方法的使用和对象数组,5.3.3 方法重载 方法的重载是指在同一个类中,定义方法名称相同但参数不同的方法。当调用某个重载的方法时,Java会根据参数的类型、个数和顺序的不同,调用与之相符的方法。 比如,前面介绍的构造方法,也是方法名称相同但参数不同。每个重载方法中的语句体可以相同也可以不同。 public class Volume . /实例变量定义 public int getName() public int getName(String name) ,5.3 方法的使用和对象数组,5.3.4 this 1关键字this的作用 this表示当前方法所属的类的实例 多个实例,每个实例都有一份实例变量的拷贝,但类的方法的拷贝只有一份(因为可以共享使用) 每次实例方法被调用时,都会把一定指向特定的类的对象的引用赋给this变量。 public class Rectangle public void setPosition( int newX, int newY ) this.x = newX; this.y = newY; ,5.3 方法的使用和对象数组,2关键字this最常见的应用 关键字this最常见的应用是在类的构造方法和实例方法中解决局部变量与实例变量同名的问题。 this在方法体中用来指向调用当前正在执行方法的对象。当然也可以通过使用与实例变量名不同的参数名或者局域变量名来避免这个问题。,5.3 方法的使用和对象数组,3在构造方法中使用this调用另一个构造方法 关键字this还有一个用法,就是在构造方法的第一条语句使用this语句,它的形式是this(参数),这个构造方法就会调用同一个类的另一个构造方法。(见书P141) 要注意的是,由修饰符static修饰的静态变量不能使用this来调用。,5.3 方法的使用和对象数组,5.3.5 对象比较和对象数组 1对象相等 在Java语言中,对象相等有两种含义。一种是引用相等(Reference Equality),另一种是数值相等(Value Equality) (1)引用相等。引用相等是指两个对象指向相同的内存空间,具有共同的实例变量。例如,下面的语句。 Rectangle r1, r2; r1 = new Rectangle( 20, 60, 10, 50 ); r2 = r1; r2.setPosition( 40, 40 ); 其中r2 = r1;语句表示对象r2与对象r1指向同一个内存空间。当使用r2.setPosition( 40, 40 );语句改变对象r2的矩形位置时,也相当于改变了对象r1的矩形位置。对象r1和r2的关系示意图,如图5.9所示。,5.3.5 对象比较和对象数组 1对象相等,图5.9 对象参考相等 当需要判断两个对象是否是引用相等时,使用关系运算符=来组成if语句的表达式。例如,判断Rectangle类对象r1和r2是否参考相等的if-else语句。 if ( r1 = r2 ) System.out.println( “r1与r2引用相等“ ); else System.out.println( “r1与r2引用不相等“ );,5.3.5 对象比较和对象数组 1对象相等 (2)数值相等。数值相等是指两个同类对象的所有实例变量值都一一对应相等。例如,下面的语句。 Rectangle r1, r2; r1 = new Rectangle( 20, 60, 10, 50 ); r2 = new Rectangle( 20, 60, 10, 50 ); r2.setPosition( 40, 40 ); 其中,对象r1和r2各自指向不同的内存空间,但是它们实例变量的初始化值完全相同。当使用r2.setPosition( 40, 40 );语句改变对象r2的矩形位置时,并没有改变对象r1的矩形位置。对象r1和r2的关系示意图,如图5.10所示。,5.3 方法的使用和对象数组,5.3.5 对象比较和对象数组,图5.10 对象数值相等,5.3.5 对象比较和对象数组 1对象相等 当需要判断两个对象是否是数值相等时,可以通过调用对象的实例方法equals()来实现。例如 if ( r1.equals( r2 ) ) System.out.println( “r1与r2数值相等“ ); else System.out.println( “r1与r2数值不相等“ ); 相应地,在Rectangle类中,需要添加实例方法equals(),其内容如下。 public boolean equals( Rectangle r ) boolean b = ( x = r.x ) 在Java语言提供的许多标准类中已经定义了equals()实例方法,我们不要再编写上面的方法,可以直接使用。最常用的是前面介绍过的String类中判断两个字符串是否相等的equals()方法。,5.3.5 对象比较和对象数组 2对象参数和默认值 在将两个对象进行某种比较时,一

温馨提示

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

最新文档

评论

0/150

提交评论