面向对象初级_第1页
面向对象初级_第2页
面向对象初级_第3页
面向对象初级_第4页
面向对象初级_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

1、第第5章章 一、面向对象的基本概念一、面向对象的基本概念抽象抽象;封装封装;继承;继承;多态。多态。面向对象程序设计的基本特征: 对象与类简单地说:对象对象是表示现实世界中某个具体的事物;类类是对对象的抽象描述。 张三 类(CLASS) 如: “man class ”对对象进行抽象为类对类进行实例化 对象对象 (object) 我们可以把生活所在的真实世界(我们可以把生活所在的真实世界(Real World)当作是由许多大小不同的对象所)当作是由许多大小不同的对象所组成的。对象可以是有生命的个体,比如组成的。对象可以是有生命的个体,比如一个人或一只鸟。一个人或一只鸟。对象对象 对象也可以是无生

2、命的个体,比如一辆汽车或一台计算机。 对象也可以是一件抽象的概念,如天气的变化或鼠标所产生的事件。 对象(object)计算机世界中的对象是把数据及其相关的操作封装在一起所构成的实体。封装的实体 = 数据+方法(行为) 数据:属性或状态 方法: 作用于数据上的操作 封装:属性的访问和变化通过方法完成对象的特征对象的特征 对象有两个特征:状态(对象有两个特征:状态(state)和行为()和行为(behavior)。例)。例如:一个人有他的身高或体重作状态,并有他的行为如:一个人有他的身高或体重作状态,并有他的行为如唱歌、打球、骑摩托车、开汽车。一只狗有它的颜色作如唱歌、打球、骑摩托车、开汽车。一

3、只狗有它的颜色作状态,也有它的行为,如吠叫或跳跃状态,也有它的行为,如吠叫或跳跃。 而在程序设计中,软件对象的概念由真实世界对象而来。而在程序设计中,软件对象的概念由真实世界对象而来。对象的概念是面向对象软件对象将状态保存在变量对象的概念是面向对象软件对象将状态保存在变量(variables)或称数据字段()或称数据字段(data field)里。而行为则借)里。而行为则借助方法(助方法(methods)为工具来实现)为工具来实现 。data field 1data field nmethod 1method n数据字段(状态)方法(行为)软件对象的定义软件对象的定义 我们可以对软件对象作以下

4、的定义data field 1data field nmethod 1method n私用数据细节公用方法定义:对象是由数据字段(变量)及相关方法所组成的软件包汽车对象汽车对象 以汽车为例,我们可定义其状态与方法如: 换档开大灯刹车开冷气颜色排档数排气量轮胎型号通过换档(方法)改变当前档位(属性) 当前档位 面向对象设计思想 1、抽象:是从特定的对象对象(实例)中抽取共同的性质以形成类类(一般化概念)的过程。二、类(class)的概念类:是一种抽象的数据类型,它是所有具有一定共性的对象的抽象。本质上可以认为是对对象的描述,使创建对象的“模板”。类的某一个对象则被称为是类的一个实例,是类的实例化

5、结果。 对象类实例化抽象类类 (class) 在真实世界里,有许多同“种类”的对象。而这些同“种类”的对象可被归类为一个“类”。 例如我们可将世界上所有的汽车归类为汽车类,所有的动物归为动物类。 动物类汽车类实例实例 (instance) 汽车类有些共同的状态(汽汽车类有些共同的状态(汽缸排气量,排档数,颜色,缸排气量,排档数,颜色,轮胎数轮胎数)和行为(换档,)和行为(换档,开灯,开冷气开灯,开冷气),但每),但每一台汽车个别的状态及方法一台汽车个别的状态及方法可不同于且独立于其他汽车可不同于且独立于其他汽车 。 你的汽车只是这世界中许多你的汽车只是这世界中许多汽车中的一个。我们就称你汽车中

6、的一个。我们就称你的汽车对象是汽车类中的一的汽车对象是汽车类中的一个实例(个实例(instance)。 汽车类class)实例instance)NEW你的车方法(method)方法方法 是对象的行为方式是对象的行为方式(操作)(操作) 对象与外界的接口对象与外界的接口作用作用 改变对象的属性改变对象的属性 返回对象的属性返回对象的属性 object1object2面向对象方法的主要优点与人类习惯的思维方法一致可重用性可扩展性可管理性三、定义类修饰符 class 类名 extends 父类 implements 接口名 类成员变量声明; 类方法声明;任务5-1 定义类public class S

7、tudent String name;int No;String dorm;String tel;void checkIn(String a,int b)name=a;No=b;void assignDorm(String a)dorm=a;void provideTel(String b)tel=b;四、对象的定义修饰符修饰符 类名类名 对象名对象名=new 类名类名(实参列表实参列表);或或修饰符修饰符 类名类名 对象名;对象名;对象名对象名=new 类名类名(实参列表实参列表);创建对象 类名类名 对象名;对象名; Student zhang; 注意:注意:类属于复合数据类型,因此,在声

8、明对类属于复合数据类型,因此,在声明对象时,系统并没有为对象分配空间,用户需要象时,系统并没有为对象分配空间,用户需要应用应用new完成分配空间的任务。完成分配空间的任务。 zhang =new Student( );与数组的对比性int score;score=new int10;合二为一:Student zhang=new Student(); 对象的引用引用成员变量对象名.成员变量名引用方法对象名.方法名(参数列表)5.1.2对象的生命周期对象的生命周期 1.对象的生成对象的生成 2.对象的使用对象的使用 3对象的清除对象的清除5.1.3由类的定义产生对象由类的定义产生对象对象属性或状态

9、操作或行为类数据或变量方法实例化抽象封装的实体=数据+方法【任务任务5-2】使用使用Student类类public class TermBegins public static void main(String args) Student zhang;zhang=new Student();zhang.checkIn(张三, 001);zhang.assignDorm(A-101);videTel;System.out.println(姓名:+);System.out.println(学号:+zhang.No);System.ou

10、t.println(宿舍:+zhang.dorm);System.out.println(联系电话:+zhang.tel);姓名:张三学号:1宿舍:A-101联系电话建对象演示 定义一个cube类,代表一个立方体 包含的属性有:长、宽、高,分别保存在变量x,y,z里面 方法有:求表面积 求体积 在main函数里定义一个cube类对象a,并设置立方体a的长宽高分别为3,4,5,并求出立方体a的表面积和体积打印出来。上机作业1 设计一个交通工具Vehicle,属性包括 最大速度 speed、颜色 color、类别 kind、 方法包括设置速度,颜色,类别,取得速度。颜色,

11、类别 创建Vehicle对象,并为其设置新最大速度和颜色和类别,并显示其最大速度、颜色、类别上机作业2(1)编写一个位置类Position,包含两个成员变量:横坐标x,纵坐标y;一个方法:printInfo,打印出横坐标和纵坐标;(2) 编写Position类的测试程序,创建一个点类的对象a,横坐标、纵坐标分别为3,4,要求输出点a的相关信息;举例:汽车的例子package ch5.week2;public class Car int speed;String color;String no;void drive(int a)speed=speed+a;void print()System.o

12、ut.println(speed=+speed);System.out.println(color=+color);System.out.println(no =+no);void changeColor(String aColor)color=aColor;void changeNo(String aNo)no=aNo;package ch5.week2;public class Cube /与main方法平行的地方写cube的属性和方法int x,y,z;int area()int tmp=2*(x*y+y*z+z*x);return tmp;int volumn()int tmp=x*y

13、*z;return tmp;public static void main(String args) Cube b1=new Cube();b1.x=3;b1.y=4;b1.z=5;System.out.println(表面积+b1.area();System.out.println(体积+b1.volumn();举例:立方体的例子package ch5.week2;public class Dog int age;String name;float weight;boolean isHungry;void grow()age=age+1;void eat(float foodWeight)w

14、eight=weight+foodWeight;举例:小狗的例子测试各种类的程序package ch5.week2;public class test /* * param args */public static void main(String args) / TODO Auto-generated method stub/dog/car/*Car myCar=new Car();/组装新车myCar.color=red;myCar.no=gz9090;myCar.speed=0;myCar.print();/改装车myCar.drive(40);myCar.changeColor(blu

15、e);myCar.changeNo(888888);myCar.print();Car yourCar=new Car();/组装新车yourCar.color=green;yourCar.no=gz9091;yourCar.speed=0;yourCar.print();/改装车yourCar.drive(40);yourCar.changeColor(yellow);yourCar.changeNo(888886);yourCar.print();Car sheCar=new Car();Car aBoyCar=sheCar;*/Dog dog1;dog1=new Dog();dog1.n

16、ame=tom;dog1.age=2;dog1.weight=2;dog1.eat(0.5f);System.out.print(dog1体重+dog1.weight);Dog dog2=new Dog();=jack;dog2.age=2;dog2.grow();System.out.println(dog2年龄+dog2.age); 第三周课5.1.4类的构造函数类的构造函数 【任务任务5-3】为为Student类定义构造方法。类定义构造方法。public class Student String name;int No;String dorm;String tel;St

17、udent(String aName,int aNo)name=aName;No=aNo;void assignDorm(String a)dorm=a;void provideTel(String b)tel=b;public static void main(String args) Student zhang=new Student(张三,001);zhang.assignDorm(A-101);videTel;【任务任务5-4】为为Student类定义多个构造类定义多个构造方法。方法。源代码在备注中5.2 封装性封装性 封装的定义包括下面几个

18、方面: (1)一个清晰的边界,所有对象的内部软件范围限定在这个边界之内。 (2)一个接口,该接口描述当前对象和其他对象之间的交互作用。 (3)内部实现,对象内部的实现是受保护的,这个实现给出了软件对象功能的细节,定义当前对象的类的外面不能访问这些实现细节。 5.2.1类变量和类方法类变量和类方法 对象的初始化 类中包含有成员变量和方法,当使用类中包含有成员变量和方法,当使用类声明并创建对象时,使用类声明并创建对象时,使用new关键关键字,这时系统为对象创建自己的内存字,这时系统为对象创建自己的内存区域并区域并自动调用自动调用构造方法构造方法初始化成员初始化成员变量。变量。 构造方法 构造方法是

19、一个特殊的成员方法,它与构造方法是一个特殊的成员方法,它与类名相同类名相同。在创建对象空间后,系统自。在创建对象空间后,系统自动根据参数动根据参数调用相应调用相应的构造函数。的构造函数。构造构造函数的主要功能是为数据成员赋初值。函数的主要功能是为数据成员赋初值。 构造方法的特点构造方法名与构造方法名与类名类名相同;相同;构造方法构造方法没有返回类型没有返回类型,也不是,也不是void;构造方法的主要作用是对类对象的初始化。如构造方法的主要作用是对类对象的初始化。如果没有定义构造方法时,成员变量将被初始化果没有定义构造方法时,成员变量将被初始化为各种类型的为各种类型的默认值默认值;构造方法只能与

20、构造方法只能与new关键字初始化对象时关键字初始化对象时使用,使用,其他时候不能使用;其他时候不能使用;一个类可以定义一个类可以定义多个构造方法多个构造方法,根据参数的不,根据参数的不同决定执行哪一个。同决定执行哪一个。public class Student String name;int No;String dorm;String tel;Student(String aName,int aNo)name=aName;No=aNo;void assignDorm(String a)dorm=a;void provideTel(String b)tel=b;public static voi

21、d main(String args) Student zhang=new Student(张三,001);zhang.assignDorm(A-101);videTel;任务5-3定义构造方法构造方法作用:避免对象创建后没有任何内容,强制程序员在创建对象时就给某些变量一些初始值任务5-4多个构造方法Student(String aName,int aNo)name=aName;No=aNo;Student(int aNo)No=aNo;Student(String aName)name=aName;多个构造方法,为程序员提供多种选择,在创建对象时,

22、可以任意使用其中一个public class Student String name;int No;String dorm;String tel;Student(String aName,int aNo)name=aName;No=aNo;Student(int aNo)No=aNo;Student(String aName)name=aName;void assignDorm(String a)dorm=a;void provideTel(String b)tel=b;任务5-4源代码public static void main(String args) Student zhang=new

23、 Student(张三);zhang.assignDorm(A-101);videTel;System.out.println(姓名:+);System.out.println(学号:+zhang.No);System.out.println(宿舍:+zhang.dorm);System.out.println(联系电话:+zhang.tel);System.out.println(*);Student li=new Student(002);li.assignDorm(A-102);videTel(130000088

24、88);System.out.println(姓名:+);System.out.println(学号:+li.No);System.out.println(宿舍:+li.dorm);System.out.println(联系电话:+li.tel);任务5-4源代码课后实训一一、类的定义及使用(1)编写一个位置类Position,包含两个成员变量:横坐标x,纵坐标y;一个方法:printInfo,打印出横坐标和纵坐标;(2) 编写Position类的测试程序,创建一个点a(3,4),要求输出点a的相关信息;(3) 将Position类的的两个成员变量改为私有,并添加相应的set和g

25、et方法,用 set方法为点a赋值为(5,7),用get方法取出a的坐标并打印出来; (4) 为Position类添加一个不带参数构造方法,将横坐标纵坐标初始化为原点,在测试程序中新增1个原点;(5)为Position类添加一个带参数的构造方法,传两个参数用于初始化坐标。在测试程序中新增1个点b(8,9);(6)为Position类添加一个静态变量TotalNum,用于统计创建的Position对象数,在测试程序中输出总的点数量。五、类成员变量的定义五、类成员变量的定义 定义:定义: 访问权限符访问权限符 static final 类型类型 变量名变量名 权限修饰符有:权限修饰符有: publ

26、ic、protected和和private static:在成员变量前说明该变量是静态变量。:在成员变量前说明该变量是静态变量。 final:在成员变量前说明该变量是一个最终变量:在成员变量前说明该变量是一个最终变量修饰符 static static可以修饰类中的属性和方法。可以修饰类中的属性和方法。 静态属性在类定义时静态属性在类定义时静态地分配空间静态地分配空间。它它属于类属于类,不属于某个特定的对象,因,不属于某个特定的对象,因此可以通过类进行访问。往往将属于类此可以通过类进行访问。往往将属于类的公共属性说明成的公共属性说明成static。任务5-5 static成员变量public c

27、lass Student String name;int No;String dorm;String tel;static int count=0;Student(String aName,int aNo)name=aName;No=aNo;count+;Student(int aNo)No=aNo;Student(String aName)name=aName;static void printCount()System.out.println(count);public static void main(String args) Student.printCount();Student z

28、hang=new Student(张三,001);Student li=new Student(李四,003);System.out.println(Student.count); Java实例 static方法class Sta_method int width,height;/这两个变量没用到这两个变量没用到 public static double area(int width,int height) return width*height; public static void main(String args) int i,j; double f; i=Integer.parseIn

29、t(args0); j=Integer.parseInt(args1); f=area(i,j); /直接引用此方法直接引用此方法 System.out.println(Area=+i+*+j+=+f); 静态方法 由于静态方法属于整个类,因此它不能处理属于某个对象的变量,只能处理属于整个类的变量静态变量。 静态方法中只能调用静态方法。static的访问规则 一个对象的方法可以访问对象的数据成员,也可以访问方法的局部变量 一个类方法只能访问自己的局部变量或者类变量。static的访问规则解决的办法:1. 将变量改成类变量class StaticError static String mystr

30、ing=“hello”; public static void main(String args) System.out.println(mystring); static的访问规则2. 访问局部变量class NoStaticError public static void main(String args) String mystring=“hello”; System.out.println(mystring); 【任务任务5-5】用用static变量统计变量统计Student类类对象个数。对象个数。/static变量和方法的使用public class Student String n

31、ame;int No;String dorm;String tel;static int count=0;Student(String aName,int aNo)name=aName;No=aNo;count+;Student(int aNo)No=aNo;Student(String aName)name=aName;static void printCount()System.out.println(已报到人数:+count);public static void main(String args) Student.printCount();Student zhang=new Stude

32、nt(张三,001);Student li=new Student(李四,003);System.out.println(Student.count);已报到人数:0已报到人数:25.2.2 使用使用private将变量封装起来将变量封装起来【任务任务5-6】private修饰符让修饰符让Student类的类的数据更安全。数据更安全。/设置private变量public class Student String name;int No;String dorm;String tel;private static int count=0;Student(String aName,int aNo)n

33、ame=aName;No=aNo;count+;static void printCount()System.out.println(总人数:+ count);publicpublic classclass useStudent publicpublic staticstatic voidvoid main(String args) Student zhang=newnew Student(张三,001);Student li=newnew Student(李四,003);Student.printCount();/利用函数访问count变量/System.out.println(Studen

34、t.count);/上句有语法错误,Student私有变量count不能被访问5.3扩展应用扩展应用 5.3.1数组与对象数组与对象 【任务任务5-7】用数组处理多个学生对象。用数组处理多个学生对象。publicpublic classclass Student String name;intint no ;intint score;voidvoid printInfo()System.out.println(name+t+no+t+score);publicpublic classclass useStudent publicpublic staticstatic voidvoid main

35、(String args) Student netClass=newnew Student10;intint score=90,67,78,90,65,45,67,89,76,67,;String name=susan,tom,jerry,jack,rose,maggie,elisha,Dick ,Harry,John;forfor (intint i=0;i=9;i+)netClassi=newnew Student();/为每个数组元素分配空间netClassi.no=i+1;netC=namei;netClassi.score=scorei;System.out.pr

36、intln(name+t+no+t+score);forfor (intint i=0;ibEx)returnreturn a;elseelse returnreturn b;publicpublic staticstatic voidvoid main(String args) Student zhang=newnew Student(zhangsan,001,90,90,15);Student li=newnew Student(lisi,002,89,90,20);Student wang=newnew Student(wangwu,007,98,92,10);Student zhao=

37、newnew Student(zhaoliu,012,89,70,25);Student tmp=pk(zhang,li);Student monitor=pk(tmp,wang); monitor=pk(tmp,zhao);System.out.print(取胜者为:+);取胜者为:lisi5.3.3 对象作为类的成员对象作为类的成员public class Communication double mobliePhone;/移动电话String eMail;/电子邮件double qq;/qq号码String telephone;/宿舍电话public Commun

38、ication(double mobliePhone, String mail, double qq, String telephone) super();this.mobliePhone = mobliePhone;this.eMail = mail;this.qq = qq;this.telephone = telephone;public class Student String name;int no;Communication com1;public Student(String name, int no, Communication com1) super();

39、= name;this.no = no;1 = com1;public class TestStudent public static void main(String args) Communication com=new Communication(1311115566,123456;Student zhang=new Student(zhangsan,001,com);5.4习题习题一、选择题1. 以下说法不正确的是()。 A) 类是同种对象的集合和抽象 B) 类是抽象的数据类型 C) 类是复合数据类型 D) 类是一个对象2. 定义类的类头时可以使用的关键字是

40、()。 A) private B) protected C) final D) static3. 下列选项中,用于在定义子类时声明父类名的关键字是()。 A)interface B) package C) extends D) class4.下列类头定义中,错误的是()。A) public x extends y . B) public class x extends y .C) class x extends y implements y1 . D) class x .5. 设 A为已定义的类名,下列声明A类的对象a的语句中,正确的是()。 A) float A a; B) public A

41、 a=A( ); C) A a=new int( ); D) static A a=new A( );6. 设 A为已定义的类名,下列声明A类的对象a的语句中正确的是()。 A) public A a=new A( ); B) public A a=A( ); C) A a=new class( ); D) a A;7. 设 X 、Y 均为已定义的类名,下列声明类X的对象x1的语句中正确的是()。 A) public X x1= new Y( ); B) X x1= X ( ); C) X x1=new X( ); D) int X x1;8. 设i , j为类X中定义的int型变量名,下列X

42、类的构造函数中不正确的是()。 A) void X(int k ) i=k; B) X(int k ) i=k; C) X(int m, int n ) i=m; j=n; D) X( )i=0;j=0U1 ; U1希望后面加一些填空题和简答题,以求和面得章节的统一。二、填空题:1、一个对象的三个生命周期是_、_、_。2、 使用一个对象前,必须声明并_它。3、 创建类对象的运算符是_。创建的目的是_。4、通过类MyClass中的不含参数的构造函数,生成该类的一个对象obj,可通过以下语句实现: _。 5、通过_运算符与类的对象连接,可以访问此类的成员。 6.定义类就是定义一种抽象的_,它是所有具有一定共性的对象的抽象描述。7. _是一个特殊的方法,用于对类的变量进行初始化。 8. 面向对象的软件开发方法用_把数据和基于数据的操作

温馨提示

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

评论

0/150

提交评论