【文档说明】《八、面向对象的程序设计简介》PPT课件-九年级信息技术【人教蒙教】.pptx,共(53)页,1.199 MB,由小喜鸽上传
转载请保留链接:https://www.ichengzhen.cn/view-93299.html
以下为本文档部分文字说明:
学习目标类和对象信息的封装和隐藏构造方法方法的重载this关键字函数的参数传递package语句/import语句学习目标类和对象理解面向对象的概念类的定义声明类、属性、方法创建、使用对象
对象的生命周期匿名对象信息的封装和隐藏构造方法方法的重载this关键字函数的参数传递package语句/import语句理解面向对象的概念•面向过程在一个结构体中定义窗口的大小,位置,颜色,背景等属性,对窗口操作的函数与窗口本身的定义没有任何关系,如HideW
indow,MoveWindow,MinimizeWindow,这些函数都需要接受一个代表要被操作的窗口参数,是一种谓语与宾语的关系。•面向对象定义窗口时,除了要指定在面向过程中规定的那些属性,如大小,位置,颜色,背景等外,还要指定该窗口可能具有的动作,
如隐藏,移动,最小化等。这些函数被调用时,都是以某个窗口要隐藏,某个窗口要移动的语法格式来使用的,这是一种主语与谓语的关系。•面向对象的三大特征–封装(Encapsulation)–继承(Inherit
ance)–多态(Polymorphism)面向对象的思想概述面向对象的编程思想力图使计算机语言中对事物的描述与现实世界中该事物的本来面目尽可能的一致。类(class)和对象(object)是面向对象方法的核心概念。类是对一类事物描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每
个个体,因而也称实例(instance)。如果将对象比作汽车,那么类就是汽车的设计图纸。所以面向对象程序设计的重点是类的设计,而不是对象的设计。面向对象的思想概述Java类数据1……数据n方法1……方法n属性方法Animallegeatmove数据(属性)方法类
xh:Animalleg=0eatmovexb:Animalleg=4eatmovenewAnimal()newAnimal()…类和对象举例//定义一个类publicclassAnimal{publicintlegs;publicvoideat(){System.out.println(“Eat
ing.”);}publicvoidmove(){System.out.println(“Moving.”);}}//声明并创建一个Animal类的对象,将该对象命名为xbAnimalxb=newAnimal();//调用对象xb中的
方法xb.eat();Animal+leg:int+eat():void+move():void类的定义publicclassAnimal{publicintlegs;publicvoideat(){System.o
ut.println(“Eating.”);}publicvoidmove(){System.out.println(“Moving.”);}}legs是类的属性,也叫类成员变量。eat,move是方法也叫类的成员函数。声明类语法格式:[<修饰符>]class<类名>{[<属性声
明>][<构造器声明>][<方法声明>]}说明:修饰符public:类可以被任意访问类的正文要用{}括起来举例:publicclassPerson{privateintage;//声明私有变量agepublicvoidshowAge(inti){//声明方法showAgeage=i;}}声明属性语
法格式:[<修饰符>]类型<属性名>[=初值];说明:修饰符private:该属性只能由该类的方法访问。修饰符public:该属性可以被该类以外的方法访问。类型:任何基本类型,如int、boolean或任何类。举例:publicc
lassPerson{privateintage;//声明private变量agepublicStringname=“Lila”;//声明public变量name}属性有时也称为:数据成员(数据),成员变量(变量)声明方法语法格式:<修饰符>
<返回类型><方法名>([<参数表>]){[<语句>]}说明:修饰符:public,private,protected等。返回类型:return语句传递返回值。没有返回值:void。举例:publiccl
assPerson{privateintage;publicintgetAge(){returnage;}//声明方法getAgepublicvoidsetAge(inti){//声明方法setAgeage=i;//将参数i的值赋给类的成员变量age}}方法有时也称为:
成员函数(函数)对象的创建和使用使用new+构造方法创建一个新的对象;使用“对象名.对象成员”的方式访问对象成员(包括属性和方法);publicclassAnimal{publicintlegs;publicvoideat(){Sy
stem.out.println(“Eating.”);}publicviodmove(){System.out.println(“Move.”);}}举例:publicclassZoo{publicstaticvoidmai
n(Stringargs[]){Animalxb=newAnimal();xb.legs=4;System.out.println(xb.legs);xb.eat();xb.move();}}对象的创建和使用如果创建了一个类的多个
对象,对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰。举例:publicclassZoo{publicstaticvoidmain(Stringargs[]){Animalxb=newAnimal();Animalxh=newAnimal();xb.legs=4;xh.legs
=0;System.out.println(xb.legs);//4System.out.println(xh.legs);//0xb.legs=2;System.out.println(xb.legs);//2System.out.println(xh.legs);//0}}提示
类的访问机制:在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。(有一个例外)在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中定义的成员。对象的产生classPerson{int
age;voidshout(){System.out.println(“oh,mygod!Iam“+age);}}Personp1=newPerson();执行完后的内存状态对象的产生当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化
赋值。除了基本数据类型之外的都是变量类型都是引用类型,如上面的Person及前面讲过的数组。对象的使用创建新的对象之后,我们就可以使用“对象名.对象成员”的格式,来访问对象的员classTestPerson{publicstaticvoidmain(Str
ing[]args)//上面程序运行的内存布局如下图{Personp1=newPerson();Personp2=newPerson();p1.age=-30;p1.shout();p2.shout();}}对象的生命周期匿名对象我们也可以不定义对象的句柄,而直接调用
这个对象的方法。这样的对象叫做匿名对象,如:newPerson().shout();如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。我们经常将匿名对象作为实参传递给一个函数调用。练习11.创建一个Person类,其定义如下:Person+name:Str
ing+age:int+sex:int+study():void+showAge():void+addAge(inti):void要求:(1)创建Person类的对象,设置该对象的name、age和sex属性,调用study方法,输出字符串“studying”,调用showAge()
方法显示age值,调用addAge()方法给对象的age属性值增加2岁。(2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。2.利用面向对象的编程方法,设计类Circle计算圆的面积。学习目标类和对象信息的封装和隐藏信息封装和隐藏的必要性pr
ivate关键字构造方法方法的重载this关键字函数的参数传递package语句/import语句信息的封装和隐藏(1)使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题。(version1)publiccl
assAnimal{publicintlegs;publicvoideat(){System.out.println(“Eating.”);}publicvoidmove(){System.out.println(“Moving.”);}}publiccl
assZoo{publicstaticvoidmain(Stringargs[]){Animalxb=newAnimal();xb.legs=4;System.out.println(xb.legs);xb.eat();xb.move();}
}问题:xb.legs=-1000;应该将legs属性保护起来,防止乱用。保护的方式:信息隐藏信息的封装和隐藏(2)Java中通过将数据声明为私有的(private),再提供公开的(public)方法:getXXX和setXXX实现对该属性的操作,以实现下述目的:隐藏
一个类的实现细节;使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;便于修改,增强代码的可维护性;信息的封装和隐藏(3)(VERSION2)publicclassAnimal{pr
ivateintlegs;//将属性legs定义为private,只能被Animal类内部访问publicvoidsetLegs(inti){//在这里定义方法eat()和move()if(i!=0&&i!=2&&i!=4){System.out.println("Wrongnum
beroflegs!");return;}legs=i;}publicintgetLegs(){returnlegs;}}publicclassZoo{publicstaticvoidmain(Stringargs[]){Animalxb=newAnimal();xb.setLegs(4
);//xb.setLegs(-1000);xb.legs=-1000;//非法System.out.println(xb.getLegs());}}练习21.创建程序,在其中定义两个类,Person和TestPerson类的定义如下。用setAge()设置人的合法年龄(0
~130),用getAge()返回人的年龄。在Test类中实例化Person类的对象b,调用setAge()和getAge()方法,体会Java的封装性。Person-age:int+setAge(i:int)+getAge():int学习目标类和对象信息的封装
和隐藏构造方法构造器的定义、作用分析对象创建过程内存状态的变化方法的重载this关键字函数的参数传递package语句/import语句构造器的定义与作用构造方法的特征它具有与类相同的名称;它不含返回值;注意:在构造方法里不含返回值
的概念是不同于“void”的,在定义构造方法时加了“void”,结果这个方法就不再被自动调了。构造方法的作用:当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。这就好像我们规定每个
“人”一出生就必须先洗澡,我们就可以在“人”的构造方法中加入完成“洗澡”的程序代码,于是每个“人”一出生就会自动完成“洗澡”,程序就不必再在每个人刚出生时一个一个地告诉他们要“洗澡”了。构造器(构造方法)功能:创建类的实例时,初始化实例的一组指令。语法格式:<修饰
符><类名>([<参数表>]){[<语句>]}举例:publicclassAnimal{privateintlegs;publicAnimal(){legs=4;}//构造器publicvoidsetLegs(inti){legs=i;}publicintgetLe
gs(){returnlegs;}}创建Animal类的实例:Animala=newAnimal();//调用构造器,将legs初始化为4注释:构造器的名称必须与类名相同。修饰符:public、private、pr
otected构造器不是方法,没有返回值(连void也不能写)默认的构造方法Java语言中,每个类都至少有一个构造方法;如果类的定义者没有显式的定义任何构造方法,系统将自动提供一个默认的构造方法:–默认构造方法没有参数–默认构造方
法没有方法体–默认的构造方法:Animal(){}所以:不编写构造方法就能用newXxx()创建类的实例。Java类中,一旦类的定义者显式定义了一个或多个构造方法,系统将不再提供默认的构造方法;构造器的主要作用:利用构造器参数
初始化对象的属性。练习31.在前面定义的Person类中添加构造方法,利用构造方法设置所有人的age属性初始值都为18。2.修改上题中类和构造方法,增加name属性,使得每次创建Person对象的同时初始化对象的age属
性值和name属性值。Person-age:int+setAge(i:int)+getAge():intPERSONP=NEWPERSON(“TOM”,18)的内存状态变化过程分析函数编写打印三个矩形的程
序(用流水帐的方式与用函数的方式进行对比分析)。定义一个函数的格式返回值类型函数名(参数类型形式参数1,参数类型形式参数2,….){程序代码return返回值;}其中:形式参数:在方法被调用时用于接收外部传入的数据的变
量。参数类型:就是该形式参数的数据类型。返回值:方法在执行完毕后返还给调用它的程序的数据。返回值类型:函数要返回的结果的数据类型。实参:调用函数时实际传给函数形式参数的数据。如何理解函数返回值类型为void的情况函数的调用函数调用的过程
分析函数的重载函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可。如:publicclassTest{publicstaticvoidmain(String[]args){intisum;doublefs
um;isum=add(3,5);isum=add(3,5,6);fsum=add(3.2,6.5);}publicstaticintadd(intx,inty){reutrnx+y;}publicstaticintadd(intx,inty,int
z){returnx+y+z;}publicstaticdoubleadd(doublex,doubley){returnx+y;}}在同一个类中可以定义多个同名方法—方法名重载(overload)publicclassPrintStream{publicvoi
dprint(inti){……}publicvoidprint(floatf){……}publicvoidprint(Strings){……}}重载方法的参数列表必须不同重载方法的返回值类型可以相同,也可以不同调用时根据方法的参数类型来区别。
print(3);print(1.2f);print(“hello!”);函数的重载练习41.编写程序,定义三个重载方法并调用。方法名为mOL。三个方法分别接收一个int参数、两个int参数、一个字符串参数。分别执行平方运算并输出结果,相乘并
输出结果,输出字符CallMOL串信息。在主类()的main方法中分别用参数区别调用三个方法。2.定义三个重载方法max,第一个方法求两个int值中的最大值,第二个方法求两个double值中的最大值,第三个方法求三个double值中的最大值,并分别调用三个方法。构造方
法重载•构造方法一般用来创建对象的同时初始化对象。如classPerson{Stringname;intage;publicPerson(Stringn,inta){name=n;age=a;}}•构造方法重载使得对象的创建更
加灵活,方便创建各种不同的对象。构造方法重载举例:publicclassPerson{publicPerson(Stringname,intage,Dated){this(name,age);}publicPerson(Str
ingname,intage){…}publicPerson(Stringname,Dated){…}publicPerson(){…}}构造方法重载,参数列表必须不同构造方法重载举例publicclassPerson{privateStringname;privateinta
ge;privateDatebirthDate;publicPerson(Stringname,intage,Dated){this.name=name;this.age=age;this.birthDate=d;}publicPerson(Stringname,i
ntage){this(name,age,null);//this.name=name;this.age=age;//this.birthDate=null;}publicPerson(Stringname,Dated){this(name,30,d);
//this.name=name;this.age=30;this.birthDate=d;}publicPerson(Stringname){this(name,30);//this.name=name;this.age=30;}
}练习5(1)定义Person类,有4个属性:Stringname;intage;Stringschool;Stringmajor,(2)定义Person类的3个构造方法:第一个构造方法Person(Stringn,inta)设置类的name和age属性;第二个构造方法Person(Strin
gn,inta,Strings)设置类的name,age和school属性;第三个构造方法Person(Stringn,inta,Strings,Stringm)设置类的name,age,school和major属性;(3)在main方法中分别调
用不同的构造方法创建的对象,并输出其属性值。THIS是什么?如果func2方法被调用,一定是事先已经有了一个存在的对象,func2被作为那个对象的方法被使用。在func2内部能引用别的对象,同样也能引用func2所属的那个对象。在
func2中,自己所属的那个对象的引用名称是什么呢?this关键字在java程序里的作用和它的词义很接近,它在函数内部就是这个函数所属的对象的引用变量。THIS引用句柄的存放位置每个成员方法内部,都有一个this引用变量
,指向调用这个方法的对象,类中的成员方法与this之间的关系如图函数的参数传递—基本数据类型的参数传递函数的参数传递—引用数据类型的参数传递函数的参数传递—引用参数传递的一个问题分析源文件布局软件包包帮助管理大型软件系统:将语义近
似的类组织到包中。包可以包含类和子包。例:某航运软件系统包括:一组域对象、GUI和reports子系统PACKAGE语句package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名
包)。它的格式为:package<顶层包名>[.<子包名>]*;举例:pack\Test.javapackagep1;//指定类Test属于包p1publicclassTest{publicvoiddisplay(){Syste
m.out.println("inmethoddisplay()");}}包对应于文件系统的目录,package语句中,用‘.’来指明包(目录)的层次;包通常用小写单词,类名首字母通常大写。编译和生成包如果在程序Test.java中已定义了包p1,
编译时采用如下方式:-d将生成的类文件的路径更改为另一个目录。javac-ddestpathTest.java则编译器会自动在destpath目录下建立一个子目录p1,并将生成的.class文件都放到destp
ath/p1下。javacTest.java则编译器会在当前目录下生成Test.class文件,再在适合位置(destpath目录)手动创建一个名为p1的子目录,将Test.class复制到该p1目录下。IMPORT语句为使用定义在不同包中的Java类,需用imp
ort语句来引入所需要的类。Import语句告诉编译器到哪里去寻找类。语法格式:import包名[.子包名…].<类名|*>应用举例:importp1.Test;//importp1.*;表示引入p1包中的所有类publicclassT
estPackage{publicstaticvoidmain(Stringargs[]){Testt=newTest();//Test类在p1包中定义t.display();}}IMPORT语句设Test.class存放在d:\pack\p1目录下。
设TestPackage.java存放在pack目录下。注:不能与Test.java存放在同一目录下。编译TestPackage.java:JavacTestPackage.java此时编译器会自动到其子目录p1中去查找Test.class文件。(环境变量的设置:如果
程序不能正确编译,需要设置环境变量。setclasspath=TestPackage.java所在的目录;p1的父目录)运行TestPackageJDK中主要的包介绍1.java.lang----包含一些Java语言的核心类,如String、
Math、Integer、System和Thread,提供常用功能。2.java.awt----包含了构成抽象窗口工具集(abstractwindowtoolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。3.java.applet----包含applet运行
所需的一些类。4.java.net----包含执行与网络相关的操作的类。5.java.io----包含能提供多种输入/输出功能的类。6.java.util----包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。JAVAAPI文档API----Application
ProgrammingInterfaceJavaAPI文档是一组超文本文件,提供关于Java类(API)的说明信息:类层次类的功能性描述成员变量列表及详细介绍构造方法列表及详细介绍其它方法列表及详细介绍从父类中继承来的属性及方法
列表JavaAPI文档按包组织,在某个类的API文档中还提供了指向关联类的API文档的链接;