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

下载本文档

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

文档简介

第5章

面对对象的程序设计概念一、面对对象的基本概念抽象;封装;继承;多态。面对对象程序设计的基本特性:

对象与类简朴地说:对象是表达现实世界中某个具体的事物;类是对对象的抽象描述。张三类(CLASS)如:“manclass”对对象进行抽象为类对类进行实例化对象(object)我们能够把生活所在的真实世界(RealWorld)当作是由许多大小不同的对象所构成的。对象能够是有生命的个体,例如一种人或一只鸟。对象

对象也能够是无生命的个体,例如一辆汽车或一台计算机。对象也能够是一件抽象的概念,如天气的变化或鼠标所产生的事件。

对象(object)计算机世界中的对象是把数据及其有关的操作封装在一起所构成的实体。封装的实体=数据+办法(行为)数据:属性或状态办法:作用于数据上的操作封装:属性的访问和变化通过办法完毕对象的特性对象有两个特性:状态(state)和行为(behavior)。例如:一种人有他的身高或体重作状态,并有他的行为——如唱歌、打球、骑摩托车、开汽车。一只狗有它的颜色作状态,也有它的行为,如吠叫或跳跃。而在程序设计中,软件对象的概念由真实世界对象而来。对象的概念是面对对象软件对象将状态保存在变量(variables)或称数据字段(datafield)里。而行为则借助办法(methods)为工具来实现。datafield1datafieldnmethod1methodn数据字段(状态)方法(行为)软件对象的定义

我们能够对软件对象作下列的定义——datafield1datafieldnmethod1methodn私用数据细节公用方法定义:对象是由数据字段(变量)及有关办法所构成的软件包汽车对象

以汽车为例,我们可定义其状态与办法如:换档开大灯刹车开冷气颜色排档数排气量轮胎型号通过换档(办法)变化现在档位(属性)现在档位面对对象设计思想1、抽象:是从特定的对象(实例)中抽取共同的性质以形成类(普通化概念)的过程。二、类(class)的概念类:是一种抽象的数据类型,它是全部含有一定共性的对象的抽象。本质上能够认为是对对象的描述,使创立对象的“模板”。类的某一种对象则被称为是类的一种实例,是类的实例化成果。对象类实例化抽象类

(class)在真实世界里,有许多同“种类”的对象。而这些同“种类”的对象可被归类为一种“类”。例如我们可将世界上全部的汽车归类为汽车类,全部的动物归为动物类。动物类汽车类实例

(instance)汽车类有些共同的状态(汽缸排气量,排档数,颜色,轮胎数……)和行为(换档,开灯,开冷气……),但每一台汽车个别的状态及办法可不同于且独立于其它汽车。你的汽车只是这世界中许多汽车中的一种。我们就称你的汽车对象是汽车类中的一种实例(instance)。汽车类class)实例instance)NEW你的车

办法(method)办法是对象的行为方式(操作)对象与外界的接口作用变化对象的属性返回对象的属性object1object2面对对象办法的重要优点与人类习惯的思维办法一致可重用性可扩展性可管理性三、定义类[修饰符]class类名[extends父类][implements接口名]{ 类组员变量声明;类办法声明;}任务5-1——

定义类publicclassStudent{ Stringname; intNo; Stringdorm; Stringtel; voidcheckIn(Stringa,intb){ name=a; No=b; } voidassignDorm(Stringa){ dorm=a; } voidprovideTel(Stringb){ tel=b; }}四、对象的定义[修饰符]

类名

对象名=new

类名(实参列表);或[修饰符]

类名

对象名;对象名=new

类名(实参列表);创立对象类名对象名;Studentzhang;注意:类属于复合数据类型,因此,在声明对象时,系统并没有为对象分派空间,顾客需要应用new完毕分派空间的任务。zhang=newStudent();与数组的对比性intscore[];score=newint[10];合二为一:Studentzhang=newStudent();

对象的引用引用组员变量 对象名.组员变量名引用办法 对象名.办法名(参数列表)5.1.2对象的生命周期1.对象的生成2.对象的使用3.对象的去除5.1.3由类的定义产生对象对象属性或状态操作或行为类数据或变量方法实例化抽象封装的实体=数据+方法【任务5-2】使用Student类public

classTermBegins{

public

static

voidmain(String[]args){ Studentzhang; zhang=newStudent(); zhang.checkIn("张三",001); zhang.assignDorm("A-101"); videTel(); System.out.println("姓名:"+zhang.name); System.out.println("学号:"+zhang.No); System.out.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、办法涉及设立速度,颜色,类别,获得速度。颜色,类别创立Vehicle对象,并为其设立新最大速度和颜色和类别,并显示其最大速度、颜色、类别上机作业2(1)编写一种位置类Position,包含两个组员变量:横坐标x,纵坐标y;一种办法:printInfo,打印出横坐标和纵坐标;(2)编写Position类的测试程序,创立一种点类的对象a,横坐标、纵坐标分别为3,4,规定输出点a的有关信息;举例:汽车的例子packagech5.week2;publicclassCar{intspeed;Stringcolor;Stringno;voiddrive(inta){ speed=speed+a;}voidprint(){System.out.println("speed="+speed);System.out.println("color="+color);System.out.println("no="+no);}voidchangeColor(StringaColor){ color=aColor;}voidchangeNo(StringaNo){ no=aNo;}}packagech5.week2;publicclassCube{//与main办法平行的地方写cube的属性和办法intx,y,z;intarea(){inttmp=2*(x*y+y*z+z*x);returntmp;}intvolumn(){inttmp=x*y*z;returntmp;}publicstaticvoidmain(String[]args){Cubeb1=newCube();b1.x=3;b1.y=4;b1.z=5;System.out.println("表面积"+b1.area());System.out.println("体积"+b1.volumn());}}举例:立方体的例子packagech5.week2;publicclassDog{intage;Stringname;floatweight;booleanisHungry;voidgrow(){age=age+1;}voideat(floatfoodWeight){weight=weight+foodWeight;}}举例:小狗的例子测试多个类的程序packagech5.week2;publicclasstest{/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstub//dog//car/*CarmyCar=newCar();//组装新车myCar.color="red";myCar.no="gz9090";myCar.speed=0;myCar.print();//改装车myCar.drive(40);myCar.changeColor("blue");myCar.changeNo("888888");myCar.print();CaryourCar=newCar();//组装新车yourCar.color="green";yourCar.no="gz9091";yourCar.speed=0;yourCar.print();//改装车yourCar.drive(40);yourCar.changeColor("yellow");yourCar.changeNo("888886");yourCar.print();CarsheCar=newCar();CaraBoyCar=sheCar;*/Dogdog1;dog1=newDog();="tom";dog1.age=2;dog1.weight=2;dog1.eat(0.5f);System.out.print("dog1体重"+dog1.weight);Dogdog2=newDog();="jack";dog2.age=2;dog2.grow();System.out.println("dog2年纪"+dog2.age);}}第三周课5.1.4类的构造函数【任务5-3】为Student类定义构造办法。public

classStudent{ Stringname;

int

No; Stringdorm; Stringtel; Student(StringaName,intaNo){

name=aName;

No=aNo; }

voidassignDorm(Stringa){

dorm=a; }

voidprovideTel(Stringb){

tel=b; }

public

static

voidmain(String[]args){ Studentzhang=newStudent("张三",001); zhang.assignDorm("A-101"); videTel(); }}【任务5-4】为Student类定义多个构造办法。源代码在备注中5.2封装性封装的定义涉及下面几个方面:(1)一种清晰的边界,全部对象的内部软件范畴限定在这个边界之内。(2)一种接口,该接口描述现在对象和其它对象之间的交互作用。(3)内部实现,对象内部的实现是受保护的,这个实现给出了软件对象功效的细节,定义现在对象的类的外面不能访问这些实现细节。5.2.1类变量和类办法

对象的初始化类中包含有组员变量和办法,当使用类声明并创立对象时,使用new核心字,这时系统为对象创立自己的内存区域并自动调用构造办法初始化组员变量。构造办法构造办法是一种特殊的组员办法,它与类名相似。在创立对象空间后,系统自动根据参数调用对应的构造函数。构造函数的重要功效是为数据组员赋初值。构造办法的特点构造办法名与类名相似;构造办法没有返回类型,也不是void;构造办法的重要作用是对类对象的初始化。如果没有定义构造办法时,组员变量将被初始化为多个类型的默认值;构造办法只能与new核心字初始化对象时使用,其它时候不能使用;一种类能够定义多个构造办法,根据参数的不同决定执行哪一种。public

classStudent{ Stringname;

int

No; Stringdorm; Stringtel; Student(StringaName,intaNo){

name=aName;

No=aNo; }

voidassignDorm(Stringa){

dorm=a; }

voidprovideTel(Stringb){

tel=b; }

public

static

voidmain(String[]args){ Studentzhang=newStudent("张三",001); zhang.assignDorm("A-101"); videTel(); }}任务5-3

定义构造办法构造办法作用:避免对象创立后没有任何内容,强制程序员在创立对象时就给某些变量某些初始值任务5-4多个构造办法 Student(StringaName,intaNo){

name=aName;

No=aNo; } Student(intaNo){

No=aNo; } Student(StringaName){

name=aName; }多个构造办法,为程序员提供多个选择,在创立对象时,能够任意使用其中一种public

classStudent{ Stringname;

int

No; Stringdorm; Stringtel; Student(StringaName,intaNo){

name=aName;

No=aNo; } Student(intaNo){

No=aNo; } Student(StringaName){

name=aName; }

voidassignDorm(Stringa){

dorm=a; }

voidprovideTel(Stringb){

tel=b; }

任务5-4源代码public

static

voidmain(String[]args){ Studentzhang=newStudent("张三"); zhang.assignDorm("A-101"); videTel(); System.out.println("姓名:"+zhang.name); System.out.println("学号:"+zhang.No); System.out.println("宿舍:"+zhang.dorm); System.out.println("联系电话:"+zhang.tel);

System.out.println("******************");

Studentli=newStudent(002); li.assignDorm("A-102"); videTel(); System.out.println("姓名:"+li.name); 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和get办法,用set办法为点a赋值为(5,7),用get办法取出a的坐标并打印出来;(4)为Position类添加一种不带参数构造办法,,将横坐标纵坐标初始化为原点,在测试程序中新增1个原点;(5)为Position类添加一种带参数的构造办法,传两个参数用于初始化坐标。在测试程序中新增1个点b(8,9);(6)为Position类添加一种静态变量TotalNum,用于统计创立的Position对象数,在测试程序中输出总的点数量。五、类组员变量的定义定义:[访问权限符][static][final]类型变量名权限修饰符有: public、protected和privatestatic:在组员变量前阐明该变量是静态变量。final:在组员变量前阐明该变量是一种最后变量修饰符——

staticstatic能够修饰类中的属性和办法。静态属性在类定义时静态地分派空间。它属于类,不属于某个特定的对象,因此能够通过类进行访问。往往将属于类的公共属性阐明成static。任务5-5——static组员变量 publicclassStudent{ Stringname; intNo; Stringdorm; Stringtel; staticintcount=0; Student(StringaName,intaNo){ name=aName; No=aNo;

count++; } Student(intaNo){ No=aNo; } Student(StringaName){ name=aName; } staticvoidprintCount(){ System.out.println(count); } publicstaticvoidmain(String[]args){ Student.printCount(); Studentzhang=newStudent("张三",001); Studentli=newStudent("李四",003); System.out.println(Student.count); } }Java实例——static办法classSta_method{intwidth,height;//这两个变量没用到publicstaticdoublearea(intwidth,intheight){returnwidth*height;}}publicstaticvoidmain(Stringargs[]){inti,j;doublef;i=Integer.parseInt(args[0]);j=Integer.parseInt(args[1]);f=area(i,j);//直接引用此办法System.out.println("Area="+i+"*"+j+"="+f);}静态办法由于静态办法属于整个类,因此它不能解决属于某个对象的变量,只能解决属于整个类的变量--静态变量。静态办法中只能调用静态办法。static的访问规则一种对象的办法能够访问对象的数据组员,也能够访问办法的局部变量一种类办法只能访问自己的局部变量或者类变量。static的访问规则解决的方法:1.将变量改成类变量classStaticError{staticStringmystring=“hello”;publicstaticvoidmain(Stringargs[]){ System.out.println(mystring);}}static的访问规则2.访问局部变量classNoStaticError{publicstaticvoidmain(Stringargs[]){ Stringmystring=“hello”;System.out.println(mystring);}}【任务5-5】用static变量统计Student类对象个数。//static变量和办法的使用 publicclassStudent{ Stringname; intNo; Stringdorm; Stringtel; staticintcount=0; Student(StringaName,intaNo){ name=aName; No=aNo; count++; } Student(intaNo){ No=aNo; } Student(StringaName){ name=aName; } staticvoidprintCount(){ System.out.println("已报到人数:"+count); } publicstaticvoidmain(String[]args){ Student.printCount(); Studentzhang=newStudent("张三",001); Studentli=newStudent("李四",003); System.out.println(Student.count); } }已报到人数:0已报到人数:25.2.2使用private将变量封装起来【任务5-6】private修饰符让Student类的数据更安全。//设立private变量publicclassStudent{ Stringname; intNo; Stringdorm; Stringtel; privatestaticintcount=0; Student(StringaName,intaNo){ name=aName; No=aNo; count++; } staticvoidprintCount(){ System.out.println("总人数:"+count); }}publicclassuseStudent{ publicstaticvoidmain(String[]args){ Studentzhang=newStudent("张三",001); Studentli=newStudent("李四",003); Student.printCount();//运用函数访问count变量 //System.out.println(Student.count);//上句有语法错误,Student私有变量count不能被访问 }}5.3扩展应用5.3.1数组与对象【任务5-7】用数组解决多个学生对象。public

classStudent{ Stringname;

int

no;

intscore;

voidprintInfo(){ System.out.println(name+"\t"+no+"\t"+score); }}publicclassuseStudent{ publicstaticvoidmain(String[]args){ Student[]netClass=newStudent[10]; int[]score={90,67,78,90,65,45,67,89,76,67,}; String[]name={"susan","tom","jerry","jack","rose", "maggie","elisha","Dick","Harry","John"}; for(inti=0;i<=9;i++){ netClass[i]=newStudent();//为每个数组元素分派空间 netClass[i].no=i+1; netClass[i].name=name[i]; netClass[i].score=score[i]; } System.out.println("name"+"\t"+"no"+"\t"+"score"); for(inti=0;i<=9;i++){ netClass[i].printInfo(); } }}name no scoresusan 1 90tom 2 67jerry 3 78jack 4 90rose 5 65maggie 6 45elisha 7 67Dick 8 89Harry 9 76John 10 675.3.2对象作为办法的参数和返回值【任务5-8】输入和返回参数为学生类对象。public

classStudent{ Stringname;

int

no;

double

score1;//成绩1

double

score2;//成绩2

int

sustainers;//支持者

publicStudent(Stringname,intno,doublescore1,doublescore2,intsustainers){

super();

this.name=name;

this.no=no;

this.score1=score1;

this.score2=score2;

this.sustainers=sustainers; } }//比较两个学生的信息,输出综合指数高的同窗作为班长publicclassuseStudentPk{ staticStudentpk(Studenta,Studentb){ doubleaEx=a.score1*0.2+a.score2*0.3+a.sustainers*0.5; doublebEx=b.score1*0.2+b.score2*0.3+b.sustainers*0.5; if(aEx>bEx){ returna; }else{ returnb; } } publicstaticvoidmain(String[]args){ Studentzhang=newStudent("zhangsan",001,90,90,15); Studentli=newStudent("lisi",002,89,90,20); Studentwang=newStudent("wangwu",007,98,92,10); Studentzhao=newStudent("zhaoliu",012,89,70,25); Studenttmp=pk(zhang,li); Studentmonitor=pk(tmp,wang); monitor=pk(tmp,zhao); System.out.print("取胜者为:"+); }}取胜者为:lisi5.3.3对象作为类的组员public

classCommunication{

double

mobliePhone;//移动电话

StringeMail;//电子邮件

double

qq;//qq号码

Stringtelephone;//宿舍电话

publicCommunication(doublemobliePhone,Stringmail,doubleqq,Stringtelephone){

super();

this.mobliePhone=mobliePhone;

this.eMail=mail;

this.qq=qq;

this.telephone=telephone; }}public

classStudent{ Stringname;

int

no; Communicationcom1;

publicStudent(Stringname,intno,Communicationcom1){

super();

this.name=name;

this.no=no;

this.com1=com1; }}public

classTestStudent{

public

static

voidmain(String[]args){Communicationcom=newCommunication(1311115566,"aa@163.com",123456,); Studentzhang=newStudent("zhangsan",001,com); }}5.4习题一、选择题1.下列说法不对的的是( )。A)类是同种对象的集合和抽象B)类是抽象的数据类型C)类是复合数据类型D)类是一种对象2.定义类的类头时能够使用的核心字是( )。A)privateB)protectedC)finalD)static3.下列选项中,用于在定义子类时声明父类名的核心字是( )。A)interfaceB)packageC)extendsD)class4.下列类头定义中,错误的是( )。A)publicxextendsy{...}B)publicclassxextendsy{...}C)classxextendsyimplementsy1{...}D)classx{...}5.设A为已定义的类名,下列声明A类的对象a的语句中,对的的是( )。A)floatAa;B)publicAa=A();C)Aa=newint();D)staticAa=newA();6.设A为已定义的类名,下列声明A类的对象a的语句中对的的是( )。A)publicAa=newA();B)publicAa=A();C)Aa=newclass();D)aA;7.设X、Y均为已定义的类名,下列声明类X的对象x1的语句中对的的是( )。A)publicXx1=newY();B)Xx1=X();C)Xx1=newX();D)intX

温馨提示

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

评论

0/150

提交评论