java中的对象、类、包和接口.ppt_第1页
java中的对象、类、包和接口.ppt_第2页
java中的对象、类、包和接口.ppt_第3页
java中的对象、类、包和接口.ppt_第4页
java中的对象、类、包和接口.ppt_第5页
已阅读5页,还剩128页未读 继续免费阅读

下载本文档

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

文档简介

1,第四章java中的对象、类、包和接口,4.1初识对象和类4.2对象的生命周期4.3创建类4.4包的创建和使用4.5类成员的访问控制4.6类成员与实例成员4.7继承4.8嵌入类InnerClasses4.9接口,2,4.1初识对象和类,例1.定义了一个名为SimplePoint的类publicclassSimplePointpublicintx=0;/x为成员变量publicinty=0;/y为成员变量,第四章java中的对象、类、包和接口,3,4.1初识对象和类,当创建一个新的对象时(对该类实例化),就会为该对象及其成员分配空间,同时对成员变量进行初始化。,第四章java中的对象、类、包和接口,4,4.1初识对象和类,例2定义一个名为SimpleRectangle类publicclassSimpleRectanglepublicintwidth=0;publicintheight=0;publicSimplePointorigin=newSimplePoint();,第四章java中的对象、类、包和接口,5,4.1初识对象和类,当初始化origin成员时将调用代码newSimplePoint()创建一个SimplePoint对象。,第四章java中的对象、类、包和接口,6,4.1初识对象和类,例3publicclassPointpublicintx=0;publicinty=0;/aconstructor!publicPoint(intx,inty)this.x=x;this.y=y;见例题:Rectangle.java,newPoint(44,78),第四章java中的对象、类、包和接口,7,4.2对象的生命周期,创建对象对象的使用清除对象,第四章java中的对象、类、包和接口,8,4.2对象的生命周期,创建对象通过创建一个对象可创建类的一个实例,也称实例化此类。例Rectanglerect=newRectangle();创建一个对象包括三部分:声名部分实例化部分初始化部分,第四章java中的对象、类、包和接口,9,4.2对象的生命周期1.创建对象,声名对象声明对象的名字和类型,用类名来说明对象的类型。格式:typename说明:声明对象的规则与变量声明规则相同,但对象变量是引用类型;在java里类和接口都可以作为数据类型来使用;对象声明通知编译器name将用来引用type类型的变量对象声明并不创建新的对象。例:Rectanglerect;,第四章java中的对象、类、包和接口,10,4.2对象的生命周期1.创建对象,实例化对象操作符new通过为新对象分配存储空间来实例化类格式:new类的构造方法例newRectangle(100,200);Rectanglerect=newRectangle(100,200);,第四章java中的对象、类、包和接口,11,4.2对象的生命周期1.创建对象,初始化对象每个类都至少有一个构造函数,当创建对象时调用指定的构造函数来初始化对象例Rectanglerect=newRectangle();Rectanglerect=newRectangle(100,200);Rectanglerect=newRectangle(newPoint(44,78);注:在定义类时如未定义构造函数系统,java会自动构造一个没有参数的构造函数。,第四章java中的对象、类、包和接口,12,4.2对象的生命周期2.对象的使用,使用对象包括:从对象中获得信息改变对象的状态使对象执行某些操作实现途径:引用对象的变量调用对象的方法,第四章java中的对象、类、包和接口,13,4.2对象的生命周期2.对象的使用,引用对象的变量引用对象变量的格式:对象引用.对象的变量例:rect.origin=newPoint(15,37);area=rect.height*rect.width;height=newRectangle().height;说明:可以像使用其它变量一样来使用对象的变量。例如:area=rect1.height*rect1.width,第四章java中的对象、类、包和接口,14,4.2对象的生命周期2.对象的使用,调用对象的方法格式:对象引用.对象方法名();或对象引用.对象方法名(参数表);例rect.move(15,37);newRectangle(100,50).area()说明:对于返回值的方法,方法调用可以用于表达式中调用一个对象的方法即是向该对象发送一个消息.,第四章java中的对象、类、包和接口,15,4.2对象的生命周期3.清除对象,java运行使系统有一个垃圾回收进程负责清除不再使用的对象。垃圾回收器垃圾回收器定期扫描内存,对于被应用的对象加上标记,按可能的路径扫描结束后清除未加标记的对象。被回收的对象是:不再被任何引用变量引用的对象引用变量自动放弃人为地将引用变量置为null,第四章java中的对象、类、包和接口,16,4.2对象的生命周期3.清除对象,垃圾回收器当系统的内存用尽或程序中调用System.gc()要求进行垃圾收集时,垃圾收集线程与系统同步运行。否则垃圾收集器在系统空闲时异步地执行。,第四章java中的对象、类、包和接口,17,4.2对象的生命周期3.清除对象,finialize()方法在一个对象被垃圾回收器回收之前,java解释器会自动调用对象的finalize()方法。通常在该方法内包括了释放系统资源的代码段。finalize()方法在类java.lang.Object中实现如:protectedvoidfinalize()throwsthrowable/cleanupcodeforthisclasssuper.finalize();/清除对象使用的所有资源,包括由于继/承关系而获得的资源,第四章java中的对象、类、包和接口,18,4.3创建类,4.3.1类声明4.3.2类体(ClassBody),第四章java中的对象、类、包和接口,19,4.3创建类,一个类包括两部分:类声明类体见右图:,第四章java中的对象、类、包和接口,20,4.3创建类4.3.1类声明,在类的声明里,说明了类的名字及其它属性。下图说明了类声明中包含的各部分:,第四章java中的对象、类、包和接口,21,4.3创建类4.3.1类声明,说明:在类声明中,public、abstract、final为类的修饰符,是可选的,缺省时说明所定义的类是非public、非abstract、非final的类。,第四章java中的对象、类、包和接口,22,4.3创建类4.3.2类体,类体为该类的对象提供了在生存期内需要的所有代码。包括以下几部分:构造方法(constructor)成员变量(membervariable)的声明方法(Method)的实现,第四章java中的对象、类、包和接口,23,4.3创建类4.3.2类体,1.构造方法定义:类中用来初始化新建的对象的方法称构造方法。特点:无返回类型,方法名与类名相同,第四章java中的对象、类、包和接口,24,4.3创建类4.3.2类体,1.构造方法说明:构造方法可被重载。例如:publicclassThingprivateintx;publicThing()x=47;publicThing(intnew_x)x=new_x;,第四章java中的对象、类、包和接口,25,4.3创建类4.3.2类体,1.构造方法说明:其中变量和方法称为类的成员(成员变量和成员方法),而构造方法不是类的成员。每个类中至少有一个构造方法。定义类时如未定义构造方法,运行时系统会为该类自动定义缺省的构造方法。没有任何参数没有body不做任何事情,第四章java中的对象、类、包和接口,26,4.3创建类4.3.2类体,1.构造方法说明:构造方法只能由new运算符调用构造方法同样也有访问权限的限制publicprotectedprivatepackage,第四章java中的对象、类、包和接口,27,4.3创建类4.3.2类体,2.成员变量的声明成员变量在类体中声明,但在构造方法和方法之外。classDeclarationmembervariabledeclarationsconstructordeclarationsmethoddeclarations,第四章java中的对象、类、包和接口,28,4.3创建类4.3.2类体,2.成员变量的声明声明格式:,第四章java中的对象、类、包和接口,29,4.3创建类4.3.2类体,2.成员变量的声明说明:accessLevel:对成员变量的访问控制,有四级访问控制:public,protected,package,private。缺省时为package。static:说明该变量为类变量,缺省时为实例变量。final:指明该变量的值不能被改变,既该变量为常量。例finaldoubleAVOGADRO=6.023e23;,第四章java中的对象、类、包和接口,30,4.3创建类4.3.2类体,2.成员变量的声明说明:type:用于说明成员变量的类型。可以是基本数据类型,如int,float,boolean等,也可以是引用类型,如数组名,类或接口名。在同一个类中不允许有同名的成员变量,但允许成员变量名和方法名相同。,第四章java中的对象、类、包和接口,31,4.3创建类4.3.2类体,2.成员变量的声明例子:publicclassSliderDemopublicstaticfinalintFPS_INIT=15;privateintframeNumber=0;protectedintdelay;booleanfrozen=falseTimertimer;privateStringname=FredFlintstone;,第四章java中的对象、类、包和接口,32,4.3创建类4.3.2类体,3.方法的实现与类相似,方法的声明也包括两部分:方法声明和方法体:如下图所示:,第四章java中的对象、类、包和接口,33,4.3创建类4.3.2类体,3.方法的实现方法声明:定义方法的属性,如访问控制级,返回值的类型,方法名字,参数等,第四章java中的对象、类、包和接口,34,4.3创建类4.3.2类体,3.方法的实现返回值:返回值的数据类型必须和声明中的返回类型一致,或者完全相同,或者是它的一个子类。当一个方法不需要返回值时,返回类型为void。,第四章java中的对象、类、包和接口,publicNumberreturnANumber().,35,4.3创建类4.3.2类体,3.方法的实现参数传递:1)参数的类型可以是:简单数据类型:值传送。方法接收参数的值,但并不能改变这些参数的值引用数据类型(数组类型、类或接口):地址传递。传递给方法的是数据在内存中的地址,见例题:ArgumentTest.java,第四章java中的对象、类、包和接口,36,4.3创建类4.3.2类体,3.方法的实现参数传递:2)参数的命名:参数名字可以与类的成员变量相同,但参数名会隐藏成员。变量为了区别参数与类的成员变量,我们必须使用thisclassCircleintx,y,radius;publicCircle(intx,inty,intradius)this.x=x;this.y=y;this.radius=radius;,第四章java中的对象、类、包和接口,37,4.3创建类4.3.2类体,3.方法的实现方法体:定义:方法的实现部分,包括局部变量的声明和所有合法的java语句。局部变量:在方法体内定义的变量称局部变量,局部变量的作用域限于方法内。如果局部变量的名字和类的成员变量的名字相同,则类的成员变量被隐藏可以使用this调用当前类的成员变量。,第四章java中的对象、类、包和接口,38,4.3创建类4.3.2类体,3.方法的实现例题:classVariableintx=0,y=0,z=0;/classmembervariablesvoidinit(intx,inty)this.x=x;this.y=y;intz=5;/localvariableSystem.out.println(*ininit*);System.out.println(x=+x+y=+y+z=+z);,第四章java中的对象、类、包和接口,39,4.4包的创建和使用,第四章java中的对象、类、包和接口,定义:包是一组相关的类或接口的集合,它提供了访问保护和名字空间管理。Java编译器使用文件系统目录来保存包。,40,4.4包的创建和使用,第四章java中的对象、类、包和接口,使用包的好处:程序员能很容易确定同一包中的类是相互关联的。程序员能很方便地了解到在哪里可以找到能完成特定功能的类由于每个包都创建了一个名字空间,个人创建的类名不会和其它包中的类名名发生冲突可以使同一包中的类彼此不加限制地访问,而同时对其它包中的类提供访问控制。,41,4.4包的创建和使用,第四章java中的对象、类、包和接口,1.创建包格式:packagepkg1.pkg2.pkg3;package语句必须放在原文件的开始处。例如:java.iojava.utiljava.langjava.appletjavax.swingpackagegraphics;publicclassCircle.,42,4.4包的创建和使用,第四章java中的对象、类、包和接口,1.创建包说明:package的作用域是整个源文件如果在同一个源文件中定义了多个类,最多仅可以有一个类用public修饰,且源文件名必须与该类名相同当未使用package语句时,类和接口放在无名缺省包里包的命名习惯:将Internet域名作为包名例如:pany.region.package.,43,4.4包的创建和使用,第四章java中的对象、类、包和接口,2.包的使用包中的所有类中只有public类能被包外部的类访问。有三种方法访问包中的类:1)使用长名字引用包中的公共成员即在类名前注明包名例graphics.Rectanglegraphics.RectanglemyRect=newgraphics.Rectangle();,44,4.4包的创建和使用,第四章java中的对象、类、包和接口,2.包的使用引进包的公共成员在文件的开始处使用import语句将指定的成员引进到当前文件中.格式:importpkg1.pkg2.类名例importgraphics.Circle;CirclemyCircle=newCircle();,45,4.4包的创建和使用,第四章java中的对象、类、包和接口,2.包的使用3)引进整个包使用import语句引进包中的所有类和接口格式:importpkg1.pkg2.*例importgraphics.*;现在可以使用短名字来引用类graphics包中的所有类.CirclemyCircle=newCircle();RectanglemyRectangle=newRectangle();,46,4.4包的创建和使用,第四章java中的对象、类、包和接口,3.源文件和类文件的管理JDK利用文件系统的层次结构来管理源文件和类文件。源文件和类文件所在的目录名应与其中的类所在的包名对应,编译器和解释器按此机制来查找类。如:,47,4.4包的创建和使用,第四章java中的对象、类、包和接口,3.源文件和类文件的管理,48,4.4包的创建和使用,第四章java中的对象、类、包和接口,3.源文件和类文件的管理当源文件中有多个类定义时,编译后将产生多个类文件。,49,4.4包的创建和使用,第四章java中的对象、类、包和接口,3.源文件和类文件的管理虽然类文件所在的目录序列必须与包名对应,但不一定与源文件在相同的目录中。,javacdd:classesRectangle.java,50,4.4包的创建和使用,第四章java中的对象、类、包和接口,3.源文件和类文件的管理说明:包对应于文件系统的目录管理方式可以帮助编译器和解释器找到程序中的类和接口存放的地方。CLASSPATH指出用户的类库所在目录,在类路径(CLASSPATH)中只需指出包路径之上的顶层路径CLASSPATH=.;d:classes,51,4.4包的创建和使用,第四章java中的对象、类、包和接口,3.源文件和类文件的管理设置类路径的方法设置环境变量CLASSPATH(不推荐)setclasspath=.;d:classes在调用编译器或解释器时使用-classpath选项例java-classpathd:classescom.taranis.grathpics.Test见例子:包的使用.txt,52,4.5类成员的访问控制,在java语言中对类的成员有四种级别的访问控制:private,protected,public,package.如定义类时未指定访问控制说明符,则其访问控制级别为package。,第四章java中的对象、类、包和接口,53,4.5类成员的访问控制,第四章java中的对象、类、包和接口,例题见:访问权限.txt,54,4.6类成员与实例成员,第四章java中的对象、类、包和接口,在类中声明一个变量或方法时,还可以指定它为实例成员或类成员。如下的格式:statictypeclassVar;staticreturnTypeclassMethod(paramlist),55,4.6类成员与实例成员,第四章java中的对象、类、包和接口,类变量与实例变量二者区别:运行时系统在首次遇到类变量时就为类变量存储空间;而当创建类的实例对象时才为实例变量分配存储空间。不管有多少类的实例,类变量只有一份拷贝,即所有实例共享相同的类变量;而每个实例对象都有自己的实例变量。实例变量只能通过对象来访,而类变量既可以通过类名来访问,也可以通过实例对象来访问。,56,4.6类成员与实例成员,第四章java中的对象、类、包和接口,类方法与实例方法二者区别:实例方法即能访问当前对象的实例变量也能访问类变量;类方法只能访问类变量而不能访问实例变量。实例方法只能由实例对象来调用而类方法即可以由实例对象调用也可以由类名直接调用。见例题:MemberTest.java,57,4.6类成员与实例成员,第四章java中的对象、类、包和接口,说明:可用static来定义全局变量和全局方法,这时由于类成员仍然封装在类中,与C、C+相比,可以限制全局变量和全局方法的使用范围而防止冲突。一个类的main()方法必须要用static来修饰,也是因为Java运行时系统在开始执行一个程序前,并没有生成类的一个实例,它只能通过类名来调用main()方法作为程序的入口。通常,static与final一起使用来指定一个常量如:protectedstaticfinalStringDISABLE=disable;,58,4.6类成员与实例成员,第四章java中的对象、类、包和接口,初始化类变量和实例变量(InstanceandClassMembers)可以在类中声明的时候初始化classBedAndBreakfaststaticfinalintMAX_CAPACITY=10;/类变量booleanfull=false;floatf=3.14f;Deptho=newDepth();/引用类型inti=f();/通过调用一个方法来提供初始值,59,4.6类成员与实例成员,第四章java中的对象、类、包和接口,初始化类变量和实例变量实例变量:在构造方法中进行初始化。classCounterinti;Counter(j)i=j;/.,60,4.6类成员与实例成员,第四章java中的对象、类、包和接口,初始化类变量和实例变量类变量:类初始块中进行初始化。classSpoonstaticinti;statici=47;/.这段代码仅执行一次首次生成那个类的一个对象时,或者首次访问属于那个类的一个static成员时(即便从未生成过那个类的对象)。见例题:ExplicitStatic.java,61,4.6类成员与实例成员,第四章java中的对象、类、包和接口,初始化类变量和实例变量说明:类初始块不能在任何方法内。类初始块只执行一次,62,4.7继承,第四章java中的对象、类、包和接口,4.7.1理解继承4.7.2类jave.lang.Object4.7.3final类和方法4.7.4abstract类和方法,63,4.7继承4.7.1理解继承,父类、子类和继承成员变量的隐藏和方法的重写super关键字方法的重载运行时多态instanceof操作符,第四章java中的对象、类、包和接口,64,4.7继承4.7.1理解继承,第四章java中的对象、类、包和接口,父类、子类和继承例子:,65,4.7继承4.7.1理解继承,第四章java中的对象、类、包和接口,父类、子类和继承定义:子类:继承而得到的类为子类。子类继承父类的状态和行为,同时也可以修改父类的状态或重写父类的行为,并添加新的状态和行为父类:被继承的类为父类,父类包括所有直接或间接被继承的类,66,4.7继承4.7.1理解继承,父类、子类和继承Java语言是单继承机制,不支持多重继承单继承是代码更加可靠。接口可以提供多继承功能。,第四章java中的对象、类、包和接口,67,4.7继承4.7.1理解继承,第四章java中的对象、类、包和接口,交通工具,汽车,卡车,旅行车,小汽车,轿车,跑车,面包车,父类、子类和继承,68,4.7继承4.7.1理解继承,父类、子类和继承Java中,所有的类都是通过直接或间接地继承java.lang.Object得到的,第四章java中的对象、类、包和接口,69,4.7继承4.7.1理解继承,父类、子类和继承创建子类通过在类的声明中加入extends子句来创建一个类的子类,其格式如下:classSubClassextendsSuperClass说明:如果缺省extends子句,则该类为java.lang.Object的子类,第四章java中的对象、类、包和接口,70,4.7继承4.7.1理解继承,父类、子类和继承子类能够继承什么?子类能够继承父类中public和protected的成员。子类能够继承父类中没有访问控制的成员,只要子类和父类在同一个包内。子类不能继承父类隐藏的成员变量和重写的父类方法子类不能继承父类中private成员。子类不能继承父类中构造方法。因为构造方法不是类的成员,第四章java中的对象、类、包和接口,71,4.7继承4.7.1理解继承,第四章java中的对象、类、包和接口,成员变量的隐藏和方法的重写变量的隐藏:子类中声明了和父类同名的变量,父类的成员变量被隐藏。方法的重写:子类中定义了与父类相同的方法,则父类的方法被重写。,72,4.7继承4.7.1理解继承,第四章java中的对象、类、包和接口,成员变量的隐藏和方法的重写例题:classSuperClassintx;voidsetX()x=0;,classSubClassextendsSuperClassintx;/hidexinSuperClassvoidsetX()/overloadx=5;,73,4.7继承4.7.1理解继承,第四章java中的对象、类、包和接口,成员变量的隐藏和方法的重写说明:重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型子类通过成员变量的隐藏和方法的重写可以把父类的状态和行为改变为自身的状态和行为,74,4.7继承4.7.1理解继承,例题:方法的重写,第四章java中的对象、类、包和接口,75,4.7继承4.7.1理解继承,第四章java中的对象、类、包和接口,成员变量的隐藏和方法的重写说明:子类中不能重写父类中的finalmethod子类中必须重写父类中的abstractmethod,否则子类也为抽象类。,76,4.7继承4.7.1理解继承,3.super关键字super用来引用当前对象的父类,super来实现对父类成员的访问。应用:子类在隐藏了父类的成员变量或重写了父类的方法后,常常还要用到父类的成员在重写的方法中使用父类中被重写的方法以简化代码的编写,第四章java中的对象、类、包和接口,77,4.7继承4.7.1理解继承,3.super关键字super的使用有三种情况:用来访问父类被隐藏的成员变量,如:super.variable用来调用父类中被重写的方法,如:super.Method(paramlist);用来调用父类的构造函数,如super(paramlist);例题:inheritance.java,Manager.java,第四章java中的对象、类、包和接口,78,4.7继承4.7.1理解继承,3.super关键字说明:用来调用父类的构造函数super(paramlist)必须放在子类构造方法的句首。如果子类没有明确的调用父类的构造函数,编译器会自动的调用super()语句,它调用父类的默认构造函数。如果父类没有默认构造函数则编译出错。例题:Manager1.java,第四章java中的对象、类、包和接口,79,4.7继承4.7.1理解继承,4.方法的重载(overloading)在同一个类中名字相同但参数个数或类型不同的方法。返回值可以不同。例如:publicvoidprintln(inti)publicvoidprintln(floatf)publicvoidprintln(Strings)见例题MethodOverloadingTest.java,第四章java中的对象、类、包和接口,80,4.7继承4.7.1理解继承,4.方法的重载(overloading)构造方法也可以重载。可以在构造方法的第一条语句使用this来调用其他的构造方法。见例题Employee.java,第四章java中的对象、类、包和接口,81,4.7继承4.7.1理解继承,5.运行时多态对于重写或继承的方法,Java运行时系统根据调用该方法的实例的类型来决定选择哪个方法调用。,第四章java中的对象、类、包和接口,82,4.7继承4.7.1理解继承,说明:对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法,如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。,第四章java中的对象、类、包和接口,83,4.7继承4.7.1理解继承,5.运行时多态classAvoidcallme()System.out.println(InsideAscallme()method);classBextendsAvoidcallme()System.out.println(InsideBscallme()method);publicclassDispatchpublicstaticvoidmain(Stringargs)Aa=newB();a.callme();,第四章java中的对象、类、包和接口,运行结果为:C:javaDispatchInsideBscallme()method,例题:,84,4.7继承4.7.1理解继承,5.运行时多态,第四章java中的对象、类、包和接口,例题:,classStudentpublic:/floatcalcTuition()/;classGraduateStudentextendsStudentpublic:/floatcalcTuition()/;,voidfn(Studentx)x.calcTuition();voidmain()Students;GraduateStudentgs;fn(s);fn(gs);,85,4.7继承4.7.1理解继承,例题:Shapes.java为什么要上溯到父类呢?我们可以从以下例题中找到答案:例题:music.java例题:music1.java,第四章java中的对象、类、包和接口,86,4.7继承4.7.1理解继承,6.instanceof操作符用来判断对象属于哪个类,第四章java中的对象、类、包和接口,publicclassEmployeeextendsObjectpublicclassManagerextendsEmployeepublicclassEngineerextendsEmployee-publicvoiddoSomething(Employeee)if(einstanceofManager)/ProcessaManagerelseif(einstanceofEngineer)/ProcessanEngineerelse/ProcessanyothertypeofEmployee,例如:,87,4.7继承4.7.2类jave.lang.Object,第四章java中的对象、类、包和接口,类java.lang.Object处于Java开发环境的类层次树的根部,其他所有的类都直接或间接地为它的子类一个类如果没有声明继承某个类,则默认继承Object类。publicclassEmployee.等价于:publicclassEmployeeextendsObject.,88,4.7继承4.7.2类jave.lang.Object,第四章java中的对象、类、包和接口,该类定义了一些所有对象最基本的状态和行为常用的有:equals()getClasstoStringfinalizenotifynotifyAllwait,89,4.7继承4.7.2类jave.lang.Object,第四章java中的对象、类、包和接口,equals()一般情况下需要覆盖Object中的equals()方法例如:Integerone=newInteger(1),anotherOne=newInteger(1);if(one.equals(anotherOne)System.out.println(“objectsareequal”);if(one=anotherOne)System.out.println(“objectsareequal”);elseSystem.out.println(“objectsareequal”);,90,4.7继承4.7.2类jave.lang.Object,第四章java中的对象、类、包和接口,2.getClass()getClass()方法是final方法,它不能被重写。它返回一个对象在运行时所对应的类的表示例如下面的方法得到并显示对象的类名:voidPrintClassName(Objectobj)System.out.println(“Theobjectsclassis“+obj.getClass().getName();,91,4.7继承4.7.2类jave.lang.Object,第四章java中的对象、类、包和接口,2.getClass()可以用getClass创建一个类的实例,而不必在编译时即知道到底是哪个类。下例创建了一个与对象obj具有相同类型的一个实例,所创建的对象可以是任何类。ObjectcreatNewInstanceOf(objectobj)returnobj.getClass().newInstance();,92,4.7继承4.7.2类jave.lang.Object,第四章java中的对象、类、包和接口,3.toString()toString()方法用来返回对象的字符串表示.不同的对象显示的形式也不一样。例如:System.out.println(Thread.currentThread().toString();显示结果为:Threadmain,5,mainintpInt=500;IntegerwInt=newInteger(pInt);System.out.println(wInt.toString();显示结果为:500,93,4.7继承4.7.3final数据、方法和类,第四章java中的对象、类、包和接口,1.final数据它可以是编译时的常量它可以是运行时才初始化的常量见例题:FinalData.java,94,4.7继承4.7.3final数据、方法和类,第四章java中的对象、类、包和接口,2.final方法有些方法不能被重写,这时把它限定为final方法,其格式为:finalreturnTypefinalMethod(paramlist),95,4.7继承4.7.3final数据、方法和类,第四章java中的对象、类、包和接口,3.final类final类不能被继承。出于以下原因由于,有时候希望一些类不能被继承安全性的原因:如Java中的String类。面向对象的设计上的考虑:如果你认为一个类的定义已经很完美,不需要再生成它的子类,这时也应把它修饰为final类,96,4.7继承4.7.3final数据、方法和类,第四章java中的对象、类、包和接口,3.final类定义一个final类的格式如下:finalclassfinalClassName,97,4.7继承4.7.3final数据、方法和类,第四章java中的对象、类、包和接口,3.final类finalclassDainti=7;intj=1;voidf()classFurtherextendsDa/error,98,4.7继承4.7.3abstract类和方法,第四章java中的对象、类、包和接口,abstract类:表示抽象的概念,不能够被实例化为一个对象。例如Java中的Number类定义一个抽象类的格式如下:abstractclassabstractClass,99,4.7继承4.7.3abstract类和方法,第四章java中的对象、类、包和接口,abstract方法:只有方法声明,没有具体实现的方法抽象类中可以包含抽象方法,为所有子类定义一个统一的接口,具体实现由子类完成。定义格式如下:abstractreturnTypeabstractMethod(paramlist);说明:抽象类中不一定要包含abstract方法,但是,一旦某个类中包含了abstract方法,则这个类必须声明为abstract类。,100,4.7继承4.7.3abstract类和方法,第四章java中的对象、类、包和接口,abstract方法举例:,Graphicsharecertainstates(position,boundingbox)andbehavior(move,resize,draw).,101,4.7继承4.7.3abstract类和方法,第四章java中的对象、类、包和接口,abstract方法举例:,abstractclassGraphicObjectintx,y;.voidmoveTo(intnewX,intnewY).abstractvoiddraw();,102,4.7继承4.7.3abstract类和方法,第四章java中的对象、类、包和接口,abstract方法举例:,classCircleextendsGraphicObjectvoiddraw().classRectangleextendsGraphicObjectvoiddraw().,103,4.7继承4.7.3abstract类和方法,第四章java中的对象、类、包和接口,abstract方法举例:Shapes1.java,104,4.8嵌入类(InnerClasses),第四章java中的对象、类、包和接口,定义:在一个类里面定义的类。说明:将相关的类逻辑上组织在一起。作为包含它的类的一个成员,可以访问包含类的变量和方法。,105,4.8嵌入类(InnerClasses),第四章java中的对象、类、包和接口,例题1(内部类可以作为外包类的一个成员使用,可以访问外包类的所有成员)publicclassOuter1privateintsize;/*DeclareaninnerclasscalledInner*/publicclassInnerpublicvoiddoStuff()/TheinnerclasshasaccesstosizefromOutersize+;publicvoidtestTheInner()Inneri=newInner();i.doStuff();,106,4.8嵌入类(InnerClasses),第四章java中的对象、类、包和接口,例题2:publicclassOuter3privateintsize;publicclassInnerprivateintsize;publicvoiddoStuff(intsize)size+;/thelocalparameterthis.size+;/theInnerobjectattributeOuter3.this.size+;/theOuter3objectattribute,107,4.8嵌入类(InnerClasses),第四章java中的对象、类、包和接口,说明:Inner类的名字只能使用在定义它的范围内,即包含它的类内。包含类与被包含类名字不能重。Inner类可以定义在一个方法内,它能够访问方法中用final定义的局部变量。例题3:见examInner1.doc(在外包类以外的其他类中访问内部类)例题3:见examInner2.doc(在外包类的语句块中定义内部类),108,4.9接口(Interface),第四章java中的对象、类、包和接口,4.9.1什么是接口4.9.2接口的定义4.9.3接口的实现4.9.4接口类型,109,4.9接口(Interface)4.9.1什么是接口,第四章java中的对象、类、包和接口,定义:接口就是方法定义(没有方法的实现)和常量值的集合。例如:publicinterfaceSleeperpublicvoidwakeUp();publicvoidbeep();publiclongONE_SECOND=1000;publiclongONE_MINUTE=60000;,110,4.9接口(Interface)4.9.1什么是接口,第四章java中的对象、类、包和接口,2.能否使用抽象类来替代接口?多继承问题使用接口中方法和常数的类是否一定与它有继承关系。,111,4.9接口(Interface)4.9.1什么是接口,第四章java中的对象、类、包和接口,3.接口是否能看成多重继承呢?接口虽然能完成多重继承的相似功能,但是完全不同的:一个类仅仅继承接口中的常量。一个类不能继承接口中的方法。接口继承独立于类的继承。执行相同接口的类,不一定在类继承上相关。,112,4.9接口(Interface)4.9.1什么是接口,第四章java中的对象、类、包和接口,例子:,113,4.9接口(Interface)4.9.1什么是接口,第四章java中的对象、类、包和接口,4.它的用处主要体现在下面几个方面:通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。通过接口可以声明多个类需要实现的方法。通过接口可以了解对象的交互界面,而不需了解对象所对应的类。,114,4.9接口(Interface)4.9.2接口的定义,第四章java中的对象、类、包和接口,接口的定义包括接口声明和接口体两部分:,115,4.9接口(Interface)4.9.2接口的定义,第四章java中的对象、类、包和接口,接口声明publicinterfaceinterfaceNameextendslistOfSuperInterface说明:其中public指明任意类均可以使用这个接口,缺省情况下,只有与该接口定义在同一个包中的类才可以访问这个接口。extends子句与类声明中的extends子句基本相同,不同的是一个接口可以有多个父接口,用逗号隔开,子接口继承父接口中所有的常量和方法。,116,4.9接口(Interface)4.9.2接口的定义,第四章java中的对象、类、包和接口,接口体常量定义的格式为:typeNAME=value;方法定义的格式为:returnTypemethodName(paramlist);说明:在接口中定义的常量具有public,final,static的属性。方法定义没有方法体,且用分号(;)结尾。在接口中声明的方法具有public和abstract属性。如果在子接口中定义了和父接口同名的常量或相同的方法,则父接口中的常量被隐藏,方法被重写。,117,4.9接口(Interface)4.9.2接口的定义,第四章java中的对象、类、包和接口,例如:interfaceCollectionintMAX_NUM=100;voidadd(Objectobj);voiddelete(Objectobj);Objectfind(Objectobj);intcurrentCount();这个接口可以由队列、堆栈、链表等类来实现,118,4.9接口(Interface)4.9.3接口的实现,第四章java中的对象、类、包和接口,在使用接口的类体中可以使用:接口中定义的常量必须实现接口中定义的所有方法。在类中实现接口所定义的方法时,方法的声明必须与接口中所定义的完全一致。一个类可以实现多个接口,在implements子句中用逗号分隔。,119,4.9接口(Interface)4.9.3接口的实现,第四章java中的对象、类、包和接口,例子:,publicclassAirplaneimplementsFlyerpublicvoidtakeOff().publicvoidland().publicvoidfly().,publicinterfaceFlyerpublicvoidtakeOff();publicvoidland();publicvoidfly();,120,4.9接口(Interface)4.9.4接口类型,第四章java中的对象、类、包和接口,接口可以作为一种引用类型来使用,所以可以象其它类型的一样使用。例如:假如Sleeper是接口privateSleepersleepers=newSleeperMAX_CAPACITY;privatebooleanletMeSleepFor(SleepertheSleeper,inttime).,121,4.9接口(Interface)4.9.4接

温馨提示

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

最新文档

评论

0/150

提交评论