《java 中的对象、类、包和接口.ppt》由会员分享,可在线阅读,更多相关《java 中的对象、类、包和接口.ppt(133页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第四章第四章 javajava 中的对象、类、包和接口中的对象、类、包和接口4.1 4.1 初初识识对象和类对象和类4.2 4.2 对象的生命周期对象的生命周期4.3 4.3 创建类创建类4.4 4.4 包的创建和使用包的创建和使用4.5 4.5 类成员的访问控制类成员的访问控制 4.6 4.6 类成员与实例成员类成员与实例成员 4.7 4.7 继承继承4.8 4.8 嵌入类嵌入类 Inner ClassesInner Classes4.9 4.9 接口接口14.1初识对象和类初识对象和类w例1.定义了一个名为SimplePoint的类publicclassSimplePointpublici
2、ntx=0;/x为成员变量publicinty=0;/y为成员变量第四章第四章 javajava 中的对象、类、包和接口中的对象、类、包和接口24.1初识对象和类初识对象和类w当创建一个新的对象时(对该类实例化),就会为该对象及其成员分配空间,同时对成员变量进行初始化。第四章 java 中的对象、类、包和接口34.1初识对象和类初识对象和类w例2 定义一个名为SimpleRectangle类public class SimpleRectangle public int width=0;public int height=0;public SimplePoint origin=new Simpl
3、ePoint();第四章 java 中的对象、类、包和接口44.1初识对象和类初识对象和类w当初始化origin成员时将调用代码newSimplePoint()创建一个SimplePoint对象。第四章 java 中的对象、类、包和接口54.1初识对象和类初识对象和类w例3public class Point public int x=0;public int y=0;/a constructor!public Point(int x,int y)this.x=x;this.y=y;见例题:Rectangle.java new Point(44,78)第四章 java 中的对象、类、包和接口6
4、4.2对象的生命周期对象的生命周期1.创建对象创建对象2.对象的使用对象的使用3.清除对象清除对象第四章 java 中的对象、类、包和接口74.2对象的生命周期对象的生命周期1.创建对象创建对象通过创建一个对象可创建类的一个实例,也称实例化此类。例Rectanglerect=newRectangle();创建一个对象包括三部分:n声名部分n实例化部分n初始化部分第四章 java 中的对象、类、包和接口84.2对象的生命周期对象的生命周期1.创建对象创建对象w声名对象声名对象声明对象的名字和类型,用类名来说明对象的类型。格式:typename说明:w声明对象的规则与变量声明规则相同,但对象变量是
5、引用类型;w在java里类和接口都可以作为数据类型来使用;w对象声明通知编译器name将用来引用type类型的变量w对象声明并不创建新的对象。例:Rectanglerect;第四章 java 中的对象、类、包和接口94.2对象的生命周期对象的生命周期1.创建对象创建对象w实例化对象实例化对象操作符new通过为新对象分配存储空间来实例化类格式:new类的构造方法例newRectangle(100,200);Rectanglerect=newRectangle(100,200);第四章 java 中的对象、类、包和接口104.2对象的生命周期对象的生命周期1.创建对象创建对象w初始化对象初始化对象
6、每个类都至少有一个构造函数,当创建对象时调用指定的构造函数来初始化对象例Rectanglerect=newRectangle();Rectanglerect=newRectangle(100,200);Rectanglerect=newRectangle(newPoint(44,78);注:在定义类时如未定义构造函数系统,java会自动构造一个没有参数的构造函数。第四章 java 中的对象、类、包和接口114.2对象的生命周期对象的生命周期2.对象的使用对象的使用使用对象包括:w从对象中获得信息w改变对象的状态w使对象执行某些操作实现途径:w引用对象的变量w调用对象的方法第四章 java 中的
7、对象、类、包和接口124.2对象的生命周期对象的生命周期2.对象的使用对象的使用w引用对象的变量引用对象的变量引用对象变量的格式引用对象变量的格式:对象引用.对象的变量例:rect.origin=newPoint(15,37);area=rect.height*rect.width;height=newRectangle().height;说明:可以像使用其它变量一样来使用对象的变量。例如:area=rect1.height*rect1.width第四章 java 中的对象、类、包和接口134.2对象的生命周期对象的生命周期2.对象的使用对象的使用w调用对象的方法调用对象的方法格式:对象引用.
8、对象方法名();或对象引用.对象方法名(参数表);例rect.move(15,37);newRectangle(100,50).area()说明:w对于返回值的方法,方法调用可以用于表达式中w调用一个对象的方法即是向该对象发送一个消息.第四章 java 中的对象、类、包和接口144.2对象的生命周期对象的生命周期3.清除对象清除对象java运行使系统有一个垃圾回收进程负责清除不再使用的对象。w垃圾回收器垃圾回收器垃圾回收器定期扫描内存,对于被应用的对象加上标记,按可能的路径扫描结束后清除未加标记的对象。w被回收的对象是:不再被任何引用变量引用的对象n引用变量自动放弃n人为地将引用变量置为nul
9、l第四章 java 中的对象、类、包和接口154.2对象的生命周期对象的生命周期3.清除对象清除对象w垃圾回收器垃圾回收器当系统的内存用尽或程序中调用System.gc()要求进行垃圾收集时,垃圾收集线程与系统同步运行。否则垃圾收集器在系统空闲时异步地执行。第四章 java 中的对象、类、包和接口164.2对象的生命周期对象的生命周期3.清除对象清除对象wfinialize()()方法方法在一个对象被垃圾回收器回收之前,java解释器会自动调用对象的finalize()方法。通常在该方法内包括了释放系统资源的代码段。finalize()方法在类java.lang.Object中实现如:prot
10、ectedvoidfinalize()throwsthrowable/cleanupcodeforthisclasssuper.finalize();/清除对象使用的所有资源,包括由于继/承关系而获得的资源第四章 java 中的对象、类、包和接口174.3创建类创建类4.3.1类声明类声明4.3.2类体类体(ClassBody)第四章第四章 javajava 中的对象、类、包和接口中的对象、类、包和接口184.3创建类创建类一个类包括两部分:w类声明w类体见右图:第四章第四章 javajava 中的对象、类、包和接口中的对象、类、包和接口194.3创建类创建类4.3.1类声明类声明在类的声明里
11、,说明了类的名字及其它属性。下图说明了类声明中包含的各部分:第四章 java 中的对象、类、包和接口204.3创建类创建类4.3.1类声明类声明说明:说明:在类声明中,public、abstract、final为类的修饰符,是可选的,缺省时说明所定义的类是非缺省时说明所定义的类是非public、非、非abstract、非非final的类的类。第四章 java 中的对象、类、包和接口214.3创建类创建类4.3.2类体类体类体为该类的对象提供了在生存期内需要的所有代码。包括以下几部分:1.构造方法(constructor)2.成员变量(membervariable)的声明3.方法(Method)
12、的实现第四章 java 中的对象、类、包和接口224.3创建类创建类4.3.2类体类体1.构造方法构造方法w定义定义:类中用来初始化新建的对象的方法称构造方法。w特点特点:n无返回类型,n方法名与类名相同第四章 java 中的对象、类、包和接口234.3创建类创建类4.3.2类体类体1.构造方法构造方法说明:说明:w构造方法可被重载。例如:publicclassThingprivateintx;publicThing()x=47;publicThing(intnew_x)x=new_x;第四章 java 中的对象、类、包和接口244.3创建类创建类4.3.2类体类体1.构造方法构造方法说明:说
13、明:w其中变量和方法称为类的成员(成员变量和成员方法),而构造方法不是类的成员。w每个类中至少有一个构造方法。w定义类时如未定义构造方法,运行时系统会为该类自动定义缺省的构造方法。n没有任何参数n没有bodyn不做任何事情第四章 java 中的对象、类、包和接口254.3创建类创建类4.3.2类体类体1.构造方法构造方法说明:说明:w构造方法只能由new运算符调用w构造方法同样也有访问权限的限制npublicnprotectednprivatenpackage第四章 java 中的对象、类、包和接口264.3创建类创建类4.3.2类体类体2.成员变量的声明成员变量的声明成员变量在类体中声明,但
14、在构造方法和方法之成员变量在类体中声明,但在构造方法和方法之外外。classDeclarationmembervariabledeclarationsconstructordeclarationsmethoddeclarations第四章 java 中的对象、类、包和接口274.3创建类创建类4.3.2类体类体2.成员变量的声明成员变量的声明声明格式:声明格式:第四章 java 中的对象、类、包和接口284.3创建类创建类4.3.2类体类体2.成员变量的声明成员变量的声明说明:说明:waccessLevel:对成员变量的访问控制,有四级访问控制:public,protected,package
15、,private。缺省时为package。wstatic:说明该变量为类变量,缺省时为实例变量。wfinal:指明该变量的值不能被改变,既该变量为常量常量。例例finaldoubleAVOGADRO=6.023e23;第四章 java 中的对象、类、包和接口294.3创建类创建类4.3.2类体类体2.成员变量的声明成员变量的声明说明:说明:wtype:用于说明成员变量的类型。可以是基本数据类型基本数据类型,如int,float,boolean等,也可以是引用类型引用类型,如数组名,类或接口名。w在同一个类中不允许有同名的成员变量,但允许成员变量名和方法名相同。第四章 java 中的对象、类、包
16、和接口304.3创建类创建类4.3.2类体类体2.成员变量的声明成员变量的声明例子:例子:public class SliderDemo public static final int FPS_INIT=15;private int frameNumber=0;protected int delay;boolean frozen=false Timer timer;privateStringname=FredFlintstone;第四章 java 中的对象、类、包和接口314.3创建类创建类4.3.2类体类体3.方法的实现方法的实现与类相似,方法的声明也包括两部分:方法声明和方法体:如下图所示
17、:第四章 java 中的对象、类、包和接口324.3创建类创建类4.3.2类体类体3.方法的实现方法的实现w方法声明方法声明:定义方法的属性,如访问控制级,返回值的类型,方定义方法的属性,如访问控制级,返回值的类型,方法名字,参数等法名字,参数等第四章 java 中的对象、类、包和接口334.3创建类创建类4.3.2类体类体3.方法的实现方法的实现w返回值:返回值:返回值的数据类型必须和声明中的返回类型一致,或者完全相同,或者是它的一个子类。当一个方法不需要返回值时,返回类型为void。第四章 java 中的对象、类、包和接口public Number returnANumber().344.
18、3创建类创建类4.3.2类体类体3.方法的实现方法的实现w参数传递参数传递:1)参数的类型)参数的类型可以是:n简单数据类型简单数据类型:值传送。方法接收参数的值,但并不能改变这些参数的值n引用数据类型引用数据类型(数组类型、类或接口):地址传递。传递给方法的是数据在内存中的地址,见例题:见例题:ArgumentTest.java第四章 java 中的对象、类、包和接口354.3创建类创建类4.3.2类体类体3.方法的实现方法的实现w参数传递参数传递:2)参数的命名:)参数的命名:参数名字可以与类的成员变量相同,但参数名会隐藏成员。变量为了区别参数与类的成员变量,我们必须使用thisclass
19、 Circle int x,y,radius;public Circle(int x,int y,int radius)this.this.x=x;this.this.y=y;this.this.radius=radius;第四章 java 中的对象、类、包和接口364.3创建类创建类4.3.2类体类体3.方法的实现方法的实现w方法体方法体:定义:定义:方法的实现部分,包括局部变量的声明和所有合法的java语句。局部变量:局部变量:在方法体内定义的变量称局部变量,局部变量的作用域限于方法内。如果局部变量的名字和类的成员变量的名字相同,则类的成员变量被隐藏可以使用this调用当前类的成员变量。第
20、四章 java 中的对象、类、包和接口374.3创建类创建类4.3.2类体类体3.方法的实现方法的实现例题:例题:wclassVariablewintx=0,y=0,z=0;/classmembervariableswvoidinit(intx,inty)wthis.x=x;wthis.y=y;wintz=5;/localvariablewSystem.out.println(*ininit*);wSystem.out.println(x=+x+y=+y+z=+z);ww第四章 java 中的对象、类、包和接口384.4包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口定义定
21、义:包是一组相关的类或接口的集合,它提供了访问保护和名字空间管理。Java编译器使用文件系统目录来保存包。394.4包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口使用包的好处:使用包的好处:w程序员能很容易确定同一包中的类是相互关联的。w程序员能很方便地了解到在哪里可以找到能完成特定功能的类 w由于每个包都创建了一个名字空间,个人创建的类名不会和其它包中的类名名发生冲突 w可以使同一包中的类彼此不加限制地访问,而同时对其它包中的类提供访问控制。404.4包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口1.创建包创建包格式:格式:package pkg1
22、.pkg2.pkg3;package语句必须放在原文件的开始处。例如: java.io java.util java.lang java.applet javax.swingpackage graphics;public class Circle .414.4包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口1.创建包创建包说明:说明:wpackage的作用域是整个源文件 w如果在同一个源文件中定义了多个类,最多仅可以有一个类用public修饰,且源文件名必须与该类名相同 w当未使用package语句时,类和接口放在无名缺省包里 w包的命名习惯:将Internet域名作为包名
23、 例如:pany.region.package.424.4包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口2.包的使用包的使用包中的所有类中只有public类能被包外部的类访问。有三种方法三种方法访问包中的类:1)使用长名字引用包中的公共成员使用长名字引用包中的公共成员即在类名前注明包名即在类名前注明包名例graphics.Rectanglegraphics.RectanglemyRect=newgraphics.Rectangle();434.4包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口2.包的使用包的使用2)引进包的公共成员引进包的公共成员在文
24、件的开始处使用import语句将指定的成员引进到当前文件中.格式:importpkg1.pkg2.类名例importgraphics.Circle;CirclemyCircle=newCircle();444.4包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口2.包的使用包的使用3)引进整个包引进整个包使用import语句引进包中的所有类和接口格式:importpkg1.pkg2.*例importgraphics.*;现在可以使用短名字来引用类graphics包中的所有类.CirclemyCircle=newCircle();RectanglemyRectangle=new
25、Rectangle();454.4包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口3.源文件和类文件的管理源文件和类文件的管理JDK利用文件系统的层次结构来管理源文件和类文件。源文件和类文件所在的目录名应与其中的类所在的包名对应,编译器和解释器按此机制来查找类。如:464.4包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口3.源文件和类文件的管理源文件和类文件的管理474.4包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口3.源文件和类文件的管理源文件和类文件的管理当源文件中有多个类定义时,编译后将产生多个类文件。484.4包的创建和
26、使用包的创建和使用第四章 java 中的对象、类、包和接口3.源文件和类文件的管理源文件和类文件的管理虽然类文件所在的目录序列必须与包名对应,但不一定与源文件在相同的目录中。javacdd:classesRectangle.java494.4包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口3.源文件和类文件的管理源文件和类文件的管理说明:说明:w包对应于文件系统的目录管理方式可以帮助编译器和解释器找到程序中的类和接口存放的地方。wCLASSPATH指出用户的类库所在目录,在类路径(CLASSPATH)中只需指出包路径之上的顶层路径CLASSPATH=.;d:classes5
27、04.4包的创建和使用包的创建和使用第四章 java 中的对象、类、包和接口3.源文件和类文件的管理源文件和类文件的管理设置类路径的方法设置类路径的方法w设置环境变量CLASSPATH(不推荐)set classpath=.;d:classes在调用编译器或解释器时使用-classpath选项 例 java-classpath d:classes com.taranis.grathpics.Test 见例子:包的使用.txt514.5类成员的访问控制类成员的访问控制在java语言中对类的成员有四种级别的访问控制:private,protected,public,package.如定义类时未指定
28、访问控制说明符,则其访问控制级别为package。第四章 java 中的对象、类、包和接口问范围说明符当前类所有子类包内所有类所有包中的类privateXprotectedXXXpublicXXXXpackageXX524.5类成员的访问控制类成员的访问控制第四章 java 中的对象、类、包和接口例题见:访问权限.txt534.6类成员与实例成员类成员与实例成员第四章 java 中的对象、类、包和接口在类中声明一个变量或方法时,还可以指定它为实例成员或类成员。如下的格式:statictypeclassVar;staticreturnTypeclassMethod(paramlist)544.6
29、类成员与实例成员类成员与实例成员第四章 java 中的对象、类、包和接口1.类变量与实例变量类变量与实例变量二者区别:二者区别:w运行时系统在首次遇到类变量时就为类变量存储空间;运行时系统在首次遇到类变量时就为类变量存储空间;而当创建类的实例对象时才为实例变量分配存储空间。而当创建类的实例对象时才为实例变量分配存储空间。w不管有多少类的实例,类变量只有一份拷贝,即所有不管有多少类的实例,类变量只有一份拷贝,即所有实例共享相同的类变量;而每个实例对象都有自己的实例共享相同的类变量;而每个实例对象都有自己的实例变量。实例变量。w实例变量只能通过对象来访,而类变量既可以通过类实例变量只能通过对象来访
30、,而类变量既可以通过类名来访问,也可以通过实例对象来访问。名来访问,也可以通过实例对象来访问。554.6类成员与实例成员类成员与实例成员第四章 java 中的对象、类、包和接口2.类方法与实例方法类方法与实例方法二者区别:w实例方法即能访问当前对象的实例变量也能访问类变量;类方法只能访问类变量而不能访问实例变量。w实例方法只能由实例对象来调用而类方法即可以由实例对象调用也可以由类名直接调用。见例题:见例题:MemberTest.java564.6类成员与实例成员类成员与实例成员第四章 java 中的对象、类、包和接口说明:说明:w可用static来定义全局变量和全局方法,这时由于类成员仍然封装
31、在类中,与C、C+相比,可以限制全局变量和全局方法的使用范围而防止冲突。w一个类的main()方法必须要用static来修饰,也是因为Java运行时系统在开始执行一个程序前,并没有生成类的一个实例,它只能通过类名来调用main()方法作为程序的入口。w通常,static与final一起使用来指定一个常量如:protectedstaticfinalStringDISABLE=disable;574.6类成员与实例成员类成员与实例成员第四章 java 中的对象、类、包和接口3.初始化类变量和实例变量初始化类变量和实例变量(InstanceandClassMembers)w可以在类中声明的时候初始化
32、classBedAndBreakfaststaticfinalintMAX_CAPACITY=10;/类变量booleanfull=false;floatf=3.14f;Deptho=newDepth();/引用类型引用类型inti=f();/通过调用一个方法来提供初始值通过调用一个方法来提供初始值584.6类成员与实例成员类成员与实例成员第四章 java 中的对象、类、包和接口3.初始化类变量和实例变量初始化类变量和实例变量实例变量:在构造方法中进行初始化。class Counter int i;Counter(j)i=j;/.594.6类成员与实例成员类成员与实例成员第四章 java 中的
33、对象、类、包和接口3.初始化类变量和实例变量初始化类变量和实例变量类变量:类初始块中进行初始化。class Spoon static int i;static i=47;/.这段代码仅执行一次首次生成那个类的一个对象时,或者首次访问属于那个类的一个static成员时(即便从未生成过那个类的对象)。见例题:见例题:ExplicitStatic.javaExplicitStatic.java604.6类成员与实例成员类成员与实例成员第四章 java 中的对象、类、包和接口3.初始化类变量和实例变量初始化类变量和实例变量说明:说明:w类初始块不能在任何方法内。w类初始块只执行一次614.7继继承承第
34、四章 java 中的对象、类、包和接口4.7.1理解继承理解继承4.7.2类类jave.lang.Object4.7.3final类类和方法和方法4.7.4abstract类类和方法和方法624.7继继承承4.7.1理解继承理解继承1.1.父类、子类和继承父类、子类和继承2.成员变量的隐藏和方法的重写成员变量的隐藏和方法的重写3.super关键字关键字4.方法的重载方法的重载5.运行运行时时多多态态6.6.instanceofinstanceof 操作符操作符第四章 java 中的对象、类、包和接口634.7继继承承4.7.1理解继承理解继承第四章 java 中的对象、类、包和接口1.1.父类
35、、子类和继承父类、子类和继承2.2.例子:例子:644.7继继承承4.7.1理解继承理解继承第四章 java 中的对象、类、包和接口1.1.父类、子类和继承父类、子类和继承w定义:定义:子类子类:继承而得到的类为子类。子类继承父类的状态和行为,同时也可以修改父类的状态或重写父类的行为,并添加新的状态和行为 父类父类:被继承的类为父类,父类包括所有直接或间接被继承的类 654.7继继承承4.7.1理解继承理解继承1.1.父类、子类和继承父类、子类和继承w Java语言是单继承机制,不支持多重继承n单继承是代码更加可靠。n接口可以提供多继承功能。第四章 java 中的对象、类、包和接口664.7继
36、继承承4.7.1理解继承理解继承第四章 java 中的对象、类、包和接口交通工具交通工具汽车汽车卡车卡车旅行车旅行车小汽车小汽车轿车轿车跑车跑车面包车面包车1.1.父类、子类和继承父类、子类和继承674.7继继承承4.7.1理解继承理解继承1.1.父类、子类和继承父类、子类和继承w Java中,所有的类都是通过直接或间接地继承java.lang.Object得到的第四章 java 中的对象、类、包和接口 684.7继继承承4.7.1理解继承理解继承1.1.父类、子类和继承父类、子类和继承w创建子类创建子类通过在类的声明中加入extends子句来创建一个类的子类,其格式如下:classSubCl
37、assextendsSuperClass说明:说明:如果缺省extends子句,则该类为java.lang.Object的子类第四章 java 中的对象、类、包和接口694.7继继承承4.7.1理解继承理解继承1.1.父类、子类和继承父类、子类和继承w 子类能够继承什么?子类能够继承什么?n子类能够继承父类中public和protected的成员。n子类能够继承父类中没有访问控制的成员,只要子类和父类在同一个包内。n子类不能继承父类隐藏的成员变量和重写的父类方法n子类不能继承父类中private成员。n子类不能继承父类中构造方法。因为构造方法不是类的成员第四章 java 中的对象、类、包和接口
38、704.7继继承承4.7.1理解继承理解继承第四章 java 中的对象、类、包和接口2.2.成员变量的隐藏和方法的重成员变量的隐藏和方法的重写写变量的隐藏变量的隐藏:子类中声明了和父类同名的变量,父类的成员变量被隐藏。方法的重方法的重写:写:子类中定义了与父类相同的方法,则父类的方法被重写。714.7继继承承4.7.1理解继承理解继承第四章 java 中的对象、类、包和接口2.2.成员变量的隐藏和方法的重成员变量的隐藏和方法的重写写例题:classSuperClassintx;voidsetX()x=0;classSubClassextendsSuperClassintx;/hidexinSu
39、perClassvoidsetX()/overloadx=5;724.7继继承承4.7.1理解继承理解继承第四章 java 中的对象、类、包和接口2.2.成员变量的隐藏和方法的重成员变量的隐藏和方法的重写写说明:说明:n重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型n子类通过成员变量的隐藏和方法的重写可以把父类的状态和行为改变为自身的状态和行为734.7继继承承4.7.1理解继承理解继承例题:方法的重写 第四章 java 中的对象、类、包和接口744.7继继承承4.7.1理解继承理解继承第四章 java 中的对象、类、包和接口2.2.成员变量的隐藏和方法的重成员变
40、量的隐藏和方法的重写写说明:说明:n子类中不能重写父类中的finalmethodn子类中必须重写父类中的abstractmethod,否则子类也为抽象类。754.7继继承承4.7.1理解继承理解继承3.super3.super关键字关键字 super用来引用当前对象的父类,super来实现对父类成员的访问。应用:应用:n子类在隐藏了父类的成员变量或重写了父类的方法后,常常还要用到父类的成员n在重写的方法中使用父类中被重写的方法以简化代码的编写第四章 java 中的对象、类、包和接口764.7继继承承4.7.1理解继承理解继承3.super3.super关键字关键字 super的使用有三种情况:
41、n用来访问父类被隐藏的成员变量,如:super.variablen用来调用父类中被重写的方法,如:super.Method(paramlist);n用来调用父类的构造函数,如super(paramlist);例题:例题:inheritance.javainheritance.java,Manager.javaManager.java第四章 java 中的对象、类、包和接口774.7继继承承4.7.1理解继承理解继承3.super3.super关键字关键字说明:说明:w用来调用父类的构造函数super(paramlist)必须放在子类构造方法的句首。w如果子类没有明确的调用父类的构造函数,编译器
42、会自动的调用super()语句,它调用父类的默认构造函数。n如果父类没有默认构造函数则编译出错。例题:例题:Manager1.javaManager1.java第四章 java 中的对象、类、包和接口784.7继继承承4.7.1理解继承理解继承4.4.方法的重载方法的重载(overloading)在同一个类中名字相同但参数个数或类型不同的方法。返回值可以不同。例如:publicvoidprintln(inti)publicvoidprintln(floatf)publicvoidprintln(Strings)见例题见例题MethodOverloadingTest.java第四章 java 中
43、的对象、类、包和接口794.7继继承承4.7.1理解继承理解继承4.4.方法的重载方法的重载(overloading)构造方法也可以重载。可以在构造方法的第一条语句使用this来调用其他的构造方法。见例题见例题Employee.java第四章 java 中的对象、类、包和接口804.7继继承承4.7.1理解继承理解继承5.5.运行时多态运行时多态对于重写或继承的方法,Java运行时系统根据调用该方法的实例的类型来决定选择哪个方法调用。第四章 java 中的对象、类、包和接口814.7继继承承4.7.1理解继承理解继承说明:w对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法
44、,w如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。第四章 java 中的对象、类、包和接口824.7继继承承4.7.1理解继承理解继承5.5.运行时多态运行时多态classAvoidcallme()System.out.println(InsideAscallme()method);classBextendsAvoidcallme()System.out.println(InsideBscallme()method);publicclassDispatchpublicstaticvoidmain(Stringargs)Aa=newB();a.callme();第四章 java
45、 中的对象、类、包和接口运行结果为:C:javaDispatchInsideBscallme()method例题:834.7继继承承4.7.1理解继承理解继承5.5.运行时多态运行时多态第四章 java 中的对象、类、包和接口例题:classStudentpublic:/floatcalcTuition()/;classGraduateStudentextendsStudentpublic:/floatcalcTuition()/;voidfn(Studentx)x.calcTuition();voidmain()Students;GraduateStudentgs;fn(s);fn(gs);
46、844.7继继承承4.7.1理解继承理解继承例题:Shapes.java为什么要上溯到父类呢?我们可以从以下例题中找到答案:例题:music.java例题:music1.java第四章 java 中的对象、类、包和接口854.7继继承承4.7.1理解继承理解继承6.6.instanceofinstanceof 操作符操作符用来判断对象属于哪个类用来判断对象属于哪个类第四章 java 中的对象、类、包和接口publicclassEmployeeextendsObjectpublicclassManagerextendsEmployeepublicclassEngineerextendsEmplo
47、yee-publicvoiddoSomething(Employeee)if(einstanceofManager)/ProcessaManagerelseif(einstanceofEngineer)/ProcessanEngineerelse/ProcessanyothertypeofEmployee例如:864.7继继承承4.7.2类类jave.lang.Object第四章 java 中的对象、类、包和接口w类java.lang.Object处于Java开发环境的类层次树的根部,其他所有的类都直接或间接地为它的子类w一个类如果没有声明继承某个类,则默认继承Object类。publiccl
48、assEmployee.等价于:publicclassEmployeeextendsObject.874.7继继承承4.7.2类类jave.lang.Object第四章 java 中的对象、类、包和接口该类定义了一些所有对象最基本的状态和行为常用的有:1.equals()2.getClass3.toString4.finalize5.notify6.notifyAll7.wait884.7继继承承4.7.2类类jave.lang.Object第四章 java 中的对象、类、包和接口1.equals()一般情况下需要覆盖Object中的equals()方法例如:例如:Integerone=new
49、Integer(1),anotherOne=newInteger(1);if(one.equals(anotherOne)System.out.println(“objectsareequal”);if(one=anotherOne)System.out.println(“objectsareequal”);elseSystem.out.println(“objectsareequal”);894.7继继承承4.7.2类类jave.lang.Object第四章 java 中的对象、类、包和接口2.getClass()getClass()方法是final方法,它不能被重写。它返回一个对象在运行时
50、所对应的类的表示例如下面的方法得到并显示对象的类名:voidPrintClassName(Objectobj)System.out.println(“Theobjectsclassis“+obj.getClass().getName();904.7继继承承4.7.2类类jave.lang.Object第四章 java 中的对象、类、包和接口2.getClass()可以用getClass创建一个类的实例,而不必在编译时即知道到底是哪个类。下例创建了一个与对象obj具有相同类型的一个实例,所创建的对象可以是任何类。ObjectcreatNewInstanceOf(objectobj)returno