1、1,第四章 java 中的对象、类、包和接口,4.1 初识对象和类 4.2 对象的生命周期 4.3 创建类 4.4 包的创建和使用 4.5 类成员的访问控制 4.6 类成员与实例成员 4.7 继承 4.8 嵌入类 Inner Classes 4.9 接口,2,4.1 初识对象和类,例1. 定义了一个名为SimplePoint 的类public class SimplePoint public int x = 0; /x为成员变量public int y = 0; /y为成员变量,第四章 java 中的对象、类、包和接口,3,4.1 初识对象和类,当创建一个新的对象时(对该类实例化), 就会为该
2、对象及其成员分配空间,同时对成员变量进行初始化。,第四章 java 中的对象、类、包和接口,4,4.1 初识对象和类,例2 定义一个名为SimpleRectangle类 public class SimpleRectangle public int width = 0;public int height = 0;public SimplePoint origin = new SimplePoint(); ,第四章 java 中的对象、类、包和接口,5,4.1 初识对象和类,当初始化origin成员时将调用代码new SimplePoint()创建一个SimplePoint对象。,第四章 jav
3、a 中的对象、类、包和接口,6,4.1 初识对象和类,例3 public 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 中的对象、类、包和接口,7,4.2 对象的生命周期,创建对象 对象的使用 清除对象,第四章 java 中的对象、类、包和接口,8,4.2 对象的生命周期,创建对象 通过创建一个对象可创建类的一个实例,
4、也称实例化此类。例Rectangle rect = new Rectangle();创建一个对象包括三部分:声名部分 实例化部分 初始化部分,第四章 java 中的对象、类、包和接口,9,4.2 对象的生命周期 1. 创建对象,声名对象 声明对象的名字和类型,用类名来说明对象的类型。 格式:type name 说明: 声明对象的规则与变量声明规则相同,但对象变量是引用类型; 在java里类和接口都可以作为数据类型来使用; 对象声明通知编译器name将用来引用type类型的变量 对象声明并不创建新的对象。 例: Rectangle rect;,第四章 java 中的对象、类、包和接口,10,4.
5、2 对象的生命周期 1. 创建对象,实例化对象 操作符new通过为新对象分配存储空间来实例化类格式: new 类的构造方法例new Rectangle(100, 200);Rectangle rect = new Rectangle(100, 200);,第四章 java 中的对象、类、包和接口,11,4.2 对象的生命周期 1. 创建对象,初始化对象每个类都至少有一个构造函数,当创建对象时调用指定的构造函数来初始化对象 例 Rectangle rect = new Rectangle(); Rectangle rect = new Rectangle(100, 200); Rectangle
6、 rect = new Rectangle(new Point(44,78);注:在定义类时如未定义构造函数系统,java会自动构造一个没有参数的构造函数。,第四章 java 中的对象、类、包和接口,12,4.2 对象的生命周期 2. 对象的使用,使用对象包括: 从对象中获得信息 改变对象的状态 使对象执行某些操作 实现途径: 引用对象的变量 调用对象的方法,第四章 java 中的对象、类、包和接口,13,4.2 对象的生命周期 2. 对象的使用,引用对象的变量 引用对象变量的格式:对象引用.对象的变量 例: rect.origin = new Point(15, 37); area = re
7、ct.height * rect.width; height = new Rectangle().height; 说明: 可以像使用其它变量一样来使用对象的变量。 例如: area = rect1.height *rect1.width,第四章 java 中的对象、类、包和接口,14,4.2 对象的生命周期 2. 对象的使用,调用对象的方法 格式: 对象引用.对象方法名();或 对象引用.对象方法名(参数表); 例 rect.move(15, 37); new Rectangle(100, 50).area()说明: 对于返回值的方法,方法调用可以用于表达式中 调用一个对象的方法即是向该对象发
8、送一个消息.,第四章 java 中的对象、类、包和接口,15,4.2 对象的生命周期 3. 清除对象,java运行使系统有一个垃圾回收进程负责清除不再使用的对象。 垃圾回收器垃圾回收器定期扫描内存,对于被应用的对象加上标记,按可能的路径扫描结束后清除未加标记的对象。被回收的对象是: 不再被任何引用变量引用的对象 引用变量自动放弃 人为地将引用变量置为null,第四章 java 中的对象、类、包和接口,16,4.2 对象的生命周期 3. 清除对象,垃圾回收器当系统的内存用尽或程序中调用System.gc()要求进行垃圾收集时,垃圾收集线程与系统同步运行。否则垃圾收集器在系统空闲时异步地执行。,第
9、四章 java 中的对象、类、包和接口,17,4.2 对象的生命周期 3. 清除对象,finialize()方法在一个对象被垃圾回收器回收之前,java解释器会自动调用对象的finalize()方法。通常在该方法内包括了释放系统资源的代码段。finalize( )方法在类java.lang.Object中实现 如: protected void finalize ( ) throws throwable / clean up code for this classsuper. finalize( ); /清除对象使用的所有资源,包括由于继 /承关系而获得的资源 ,第四章 java 中的对象、类
10、、包和接口,18,4.3 创建类,4.3.1 类声明 4.3.2 类体 (Class Body),第四章 java 中的对象、类、包和接口,19,4.3 创建类,一个类包括两部分: 类声明 类体见右图:,第四章 java 中的对象、类、包和接口,20,4.3 创建类 4.3.1 类声明,在类的声明里,说明了类的名字及其它属性。下图说明了类声明中包含的各部分:,第四章 java 中的对象、类、包和接口,21,4.3 创建类 4.3.1 类声明,说明: 在类声明中, public、abstract、final为类的修饰符,是可选的,缺省时说明所定义的类是非public、非abstract、非fin
11、al的类。,第四章 java 中的对象、类、包和接口,22,4.3 创建类 4.3.2 类体,类体为该类的对象提供了在生存期内需要的所有代码。包括以下几部分: 构造方法( constructor ) 成员变量( member variable )的声明 方法(Method)的实现,第四章 java 中的对象、类、包和接口,23,4.3 创建类 4.3.2 类体,1. 构造方法 定义:类中用来初始化新建的对象的方法 称构造方法。特点: 无返回类型, 方法名与类名相同,第四章 java 中的对象、类、包和接口,24,4.3 创建类 4.3.2 类体,1. 构造方法 说明: 构造方法可被重载。 例如
12、:public class Thing private int x;public Thing() x = 47;public Thing( int new_ x) x = new_ x;,第四章 java 中的对象、类、包和接口,25,4.3 创建类 4.3.2 类体,1. 构造方法 说明: 其中变量和方法称为类的成员(成员变量和成员方法),而构造方法不是类的成员。 每个类中至少有一个构造方法。 定义类时如未定义构造方法,运行时系统会为该类自动定义缺省的构造方法。 没有任何参数 没有body 不做任何事情,第四章 java 中的对象、类、包和接口,26,4.3 创建类 4.3.2 类体,1.
13、构造方法 说明: 构造方法只能由new运算符调用 构造方法同样也有访问权限的限制 public protected private package,第四章 java 中的对象、类、包和接口,27,4.3 创建类 4.3.2 类体,2. 成员变量的声明成员变量在类体中声明,但在构造方法和方法之外 。 classDeclaration member variable declarationsconstructor declarationsmethod declarations ,第四章 java 中的对象、类、包和接口,28,4.3 创建类 4.3.2 类体,2. 成员变量的声明声明格式:,第四章
14、 java 中的对象、类、包和接口,29,4.3 创建类 4.3.2 类体,2. 成员变量的声明说明: accessLevel: 对成员变量的访问控制,有四级访问控制:public, protected, package, private。缺省时为package。static: 说明该变量为类变量,缺省时为实例变量。final: 指明该变量的值不能被改变,既该变量为常量。例 final double AVOGADRO = 6.023e23;,第四章 java 中的对象、类、包和接口,30,4.3 创建类 4.3.2 类体,2. 成员变量的声明说明: type: 用于说明成员变量的类型。可以是基
15、本数据类型,如int,float,boolean 等,也可以是引用类型,如数组名,类或接口名。在同一个类中不允许有同名的成员变量,但允许成员变量名和方法名相同。,第四章 java 中的对象、类、包和接口,31,4.3 创建类 4.3.2 类体,2. 成员变量的声明例子: public class SliderDemo public static final int FPS_INIT = 15; private int frameNumber = 0;protected int delay;boolean frozen = falseTimer timer;private String name
16、 = “Fred Flintstone“; ,第四章 java 中的对象、类、包和接口,32,4.3 创建类 4.3.2 类体,3. 方法的实现 与类相似,方法的声明也包括两部分:方法声明和方法体:如下图所示:,第四章 java 中的对象、类、包和接口,33,4.3 创建类 4.3.2 类体,3. 方法的实现 方法声明:定义方法的属性,如访问控制级,返回值的类型,方法名字,参数等,第四章 java 中的对象、类、包和接口,34,4.3 创建类 4.3.2 类体,3. 方法的实现 返回值:返回值的数据类型必须和声明中的返回类型一致,或者完全相同,或者是它的一个子类 。当一个方法不需要返回值时,返
17、回类型为void。,第四章 java 中的对象、类、包和接口,public Number returnANumber() . . . ,35,4.3 创建类 4.3.2 类体,3. 方法的实现 参数传递:1)参数的类型可以是: 简单数据类型:值传送。方法接收参数的值,但并不能改变这些参数的值 引用数据类型(数组类型、类或接口):地址传递。传递给方法的是数据在内存中的地址,见例题:ArgumentTest.java,第四章 java 中的对象、类、包和接口,36,4.3 创建类 4.3.2 类体,3. 方法的实现 参数传递:2)参数的命名: 参数名字可以与类的成员变量 相同,但参数名会隐藏成员。
18、变量为了区别参数与类的成员变量,我们必须使用thisclass Circle int x, y, radius; public Circle(int x, int y, int radius) this.x = x; this.y = y; this.radius = radius; ,第四章 java 中的对象、类、包和接口,37,4.3 创建类 4.3.2 类体,3. 方法的实现 方法体:定义:方法的实现部分,包括局部变量的声明和所有合法的java语句。局部变量:在方法体内定义的变量称局部变量,局部变量的作用域限于方法内。如果局部变量的名字和类的成员变量的名字相同,则类的成员变量被隐藏可以
19、使用this 调用当前类的成员变量。,第四章 java 中的对象、类、包和接口,38,4.3 创建类 4.3.2 类体,3. 方法的实现 例题: class Variableint x=0,y=0,z=0; /class member variablesvoid init( int x, int y )this.x = x;this.y =y;int z=5; /local variableSystem.out.println(“* in init *“);System.out.println(“x = “+x+“ y = “+y+“ z = “+z); ,第四章 java 中的对象、类、包和
20、接口,39,4.4 包的创建和使用,第四章 java 中的对象、类、包和接口,定义: 包是一组相关的类或接口的集合, 它提供了访问保护和名字空间管理。Java编译器使用文件系统目录来保存包。,40,4.4 包的创建和使用,第四章 java 中的对象、类、包和接口,使用包的好处: 程序员能很容易确定同一包中的类是相互关联的。程序员能很方便地了解到在哪里可以找到能完成特定功能的类 由于每个包都创建了一个名字空间,个人创建的类名不会和其它包中的类名名发生冲突 可以使同一包中的类彼此不加限制地访问,而同时对其它包中的类提供访问控制。,41,4.4 包的创建和使用,第四章 java 中的对象、类、包和接
21、口,1. 创建包格式:package pkg1.pkg2.pkg3;package语句必须放在原文件的开始处。例如: java.io java.util java.lang java.applet javax.swing package graphics; public class Circle . . . ,42,4.4 包的创建和使用,第四章 java 中的对象、类、包和接口,1. 创建包 说明: package的作用域是整个源文件 如果在同一个源文件中定义了多个类,最多仅可以有一个类用public修饰,且源文件名必须与该类名相同 当未使用package语句时, 类和接口放在无名缺省包里
22、 包的命名习惯:将Internet域名作为包名 例如:pany.region.package.,43,4.4 包的创建和使用,第四章 java 中的对象、类、包和接口,2. 包的使用包中的所有类中只有public类能被包外部的类访问。有三种方法访问包中的类: 1) 使用长名字引用包中的公共成员 即在类名前注明包名 例 graphics.Rectangle graphics.Rectangle myRect = new graphics.Rectangle();,44,4.4 包的创建和使用,第四章 java 中的对象、类、包和接口,2. 包的使用 引进包的公共成员 在文件的开始处使用impor
23、t语句将指定的成员引进到当前文件中. 格式: import pkg1.pkg2.类名 例 import graphics.Circle; Circle myCircle = new Circle();,45,4.4 包的创建和使用,第四章 java 中的对象、类、包和接口,2. 包的使用 3) 引进整个包 使用import语句引进包中的所有类和接口 格式: import pkg1.pkg2.* 例 import graphics.*; 现在可以使用短名字来引用类graphics包中的所有类. Circle myCircle = new Circle(); Rectangle myRectang
24、le = new Rectangle();,46,4.4 包的创建和使用,第四章 java 中的对象、类、包和接口,3. 源文件和类文件的管理 JDK利用文件系统的层次结构来管理源文件和类文件。源文件和类文件所在的目录名应与其中的类所在的包名对应,编译器和解释器按此机制来查找类。如:,47,4.4 包的创建和使用,第四章 java 中的对象、类、包和接口,3. 源文件和类文件的管理,48,4.4 包的创建和使用,第四章 java 中的对象、类、包和接口,3. 源文件和类文件的管理 当源文件中有多个类定义时,编译后将产生多个类文件。,49,4.4 包的创建和使用,第四章 java 中的对象、类、
25、包和接口,3. 源文件和类文件的管理 虽然类文件所在的目录序列必须与包名对应,但不一定与源文件在相同的目录中。,javac d d:classes Rectangle.java,50,4.4 包的创建和使用,第四章 java 中的对象、类、包和接口,3. 源文件和类文件的管理 说明: 包对应于文件系统的目录管理方式可以帮助编译器和解释器找到程序中的类和接口存放的地方。CLASSPATH指出用户的类库所在目录,在类路径(CLASSPATH)中只需指出包路径之上的顶层路径CLASSPATH= . ; d:classes,51,4.4 包的创建和使用,第四章 java 中的对象、类、包和接口,3.
26、源文件和类文件的管理 设置类路径的方法 设置环境变量CLASSPATH(不推荐) set classpath=.;d:classes 在调用编译器或解释器时使用-classpath选项 例 java -classpath d:classes com.taranis.grathpics.Test 见例子:包的使用.txt,52,4.5 类成员的访问控制,在java语言中对类的成员有四种级别的访问控制:private, protected, public, package. 如定义类时未指定访问控制说明符,则其访问控制级别为package。,第四章 java 中的对象、类、包和接口,53,4.5
27、类成员的访问控制,第四章 java 中的对象、类、包和接口,例题见:访问权限.txt,54,4.6 类成员与实例成员,第四章 java 中的对象、类、包和接口,在类中声明一个变量或方法时,还可以指定它为实例成员或类成员。如下的格式:static type classVar; static returnType classMethod ( paramlist ) ,55,4.6 类成员与实例成员,第四章 java 中的对象、类、包和接口,类变量与实例变量 二者区别: 运行时系统在首次遇到类变量时就为类变量存储空间;而当创建类的实例对象时才为实例变量分配存储空间。不管有多少类的实例,类变量只有一份
28、拷贝,即所有实例共享相同的类变量;而每个实例对象都有自己的实例变量。 实例变量只能通过对象来访,而类变量既可以通过类名来访问,也可以通过实例对象来访问。,56,4.6 类成员与实例成员,第四章 java 中的对象、类、包和接口,类方法与实例方法 二者区别: 实例方法即能访问当前对象的实例变量也能访问类变量;类方法只能访问类变量而不能访问实例变量。 实例方法只能由实例对象来调用而类方法即可以由实例对象调用也可以由类名直接调用。 见例题:MemberTest.java,57,4.6 类成员与实例成员,第四章 java 中的对象、类、包和接口,说明: 可用static来定义全局变量和全局方法,这时由
29、于类成员仍然封装在类中,与C、C+相比,可以限制全局变量和全局方法的使用范围而防止冲突。一个类的main( )方法必须要用static来修饰,也是因为Java运行时系统在开始执行一个程序前,并没有生成类的一个实例,它只能通过类名来调用main( )方法作为程序的入口。通常,static与final一起使用来指定一个常量如:protected static final String DISABLE = “disable“;,58,4.6 类成员与实例成员,第四章 java 中的对象、类、包和接口,初始化类变量和实例变量 (Instance and Class Members) 可以在类中声明的时
30、候初始化 class BedAndBreakfast static final int MAX_CAPACITY = 10; /类变量boolean full = false;float f = 3.14f;Depth o = new Depth(); /引用类型int i = f(); /通过调用一个方法来提供初始值 ,59,4.6 类成员与实例成员,第四章 java 中的对象、类、包和接口,初始化类变量和实例变量 实例变量:在构造方法中进行初始化。 class Counter int i; Counter(j) i = j; / . . .,60,4.6 类成员与实例成员,第四章 java
31、 中的对象、类、包和接口,初始化类变量和实例变量 类变量:类初始块中进行初始化。 class Spoon static int i;static i = 47;/ . . .这段代码仅执行一次首次生成那个类的一个对象时,或者首次访问属于那个类的一个static成员时(即便从未生成过那个类的对象)。 见例题:ExplicitStatic.java,61,4.6 类成员与实例成员,第四章 java 中的对象、类、包和接口,初始化类变量和实例变量 说明: 类初始块不能在任何方法内。 类初始块只执行一次,62,4.7 继 承,第四章 java 中的对象、类、包和接口,4.7.1 理解继承 4.7.2
32、类 jave.lang.Object 4.7.3 final类和方法 4.7.4 abstract类和方法,63,4.7 继 承 4.7.1 理解继承,父类、子类和继承 成员变量的隐藏和方法的重写 super关键字 方法的重载 运行时多态 instanceof 操作符,第四章 java 中的对象、类、包和接口,64,4.7 继 承 4.7.1 理解继承,第四章 java 中的对象、类、包和接口,父类、子类和继承例子:,65,4.7 继 承 4.7.1 理解继承,第四章 java 中的对象、类、包和接口,父类、子类和继承定义:子类:继承而得到的类为子类 。子类继承父类的状态和行为,同时也可以修改
33、父类的状态或重写父类的行为,并添加新的状态和行为 父类:被继承的类为父类,父类包括所有直接或间接被继承的类,66,4.7 继 承 4.7.1 理解继承,父类、子类和继承Java语言是单继承机制 ,不支持多重继承 单继承是代码更加可靠。 接口可以提供多继承功能。,第四章 java 中的对象、类、包和接口,67,4.7 继 承 4.7.1 理解继承,第四章 java 中的对象、类、包和接口,交通工具,汽车,卡车,旅行车,小汽车,轿车,跑车,面包车,父类、子类和继承,68,4.7 继 承 4.7.1 理解继承,父类、子类和继承Java中,所有的类都是通过直接或间接地继承java.lang.Objec
34、t得到的,第四章 java 中的对象、类、包和接口,69,4.7 继 承 4.7.1 理解继承,父类、子类和继承 创建子类通过在类的声明中加入extends子句来创建一个类的子类,其格式如下:class SubClass extends SuperClass 说明:如果缺省extends子句,则该类为java.lang.Object的子类,第四章 java 中的对象、类、包和接口,70,4.7 继 承 4.7.1 理解继承,父类、子类和继承子类能够继承什么? 子类能够继承父类中public和protected的成员。 子类能够继承父类中没有访问控制的成员,只要子类和父类在同一个包内。 子类不能
35、继承父类隐藏的成员变量和重写的父类方法 子类不能继承父类中private成员。 子类不能继承父类中构造方法。因为构造方法不是类的成员,第四章 java 中的对象、类、包和接口,71,4.7 继 承 4.7.1 理解继承,第四章 java 中的对象、类、包和接口,成员变量的隐藏和方法的重写变量的隐藏:子类中声明了和父类同名的变量,父类的成员变量被隐藏。方法的重写:子类中定义了与父类相同的方法, 则父类的方法被重写。,72,4.7 继 承 4.7.1 理解继承,第四章 java 中的对象、类、包和接口,成员变量的隐藏和方法的重写例题: class SuperClassint x;void setX
36、( )x = 0;,class SubClass extends SuperClassint x; /hide x in SuperClassvoid setX( ) /overloadx = 5;,73,4.7 继 承 4.7.1 理解继承,第四章 java 中的对象、类、包和接口,成员变量的隐藏和方法的重写说明: 重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型 子类通过成员变量的隐藏和方法的重写可以把父类的状态和行为改变为自身的状态和行为,74,4.7 继 承 4.7.1 理解继承,例题:方法的重写,第四章 java 中的对象、类、包和接口,75,4.7 继
37、承 4.7.1 理解继承,第四章 java 中的对象、类、包和接口,成员变量的隐藏和方法的重写说明: 子类中不能重写父类中的final method 子类中必须重写父类中的abstract method, 否则子类也为抽象类。,76,4.7 继 承 4.7.1 理解继承,3. super 关键字super用来引用当前对象的父类, super来实现对父类成员的访问。 应用: 子类在隐藏了父类的成员变量或重写了父类的方法后,常常还要用到父类的成员在重写的方法中使用父类中被重写的方法以简化代码的编写,第四章 java 中的对象、类、包和接口,77,4.7 继 承 4.7.1 理解继承,3. supe
38、r 关键字super的使用有三种情况:用来访问父类被隐藏的成员变量,如: super.variable用来调用父类中被重写的方法,如:super.Method ( paramlist );用来调用父类的构造函数,如 super( paramlist );例题:inheritance.java,Manager.java,第四章 java 中的对象、类、包和接口,78,4.7 继 承 4.7.1 理解继承,3. super 关键字 说明: 用来调用父类的构造函数super( paramlist )必须放在子类构造方法的句首。如果子类没有明确的调用父类的构造函数,编译器会自动的调用super()语句
39、,它调用父类的默认构造函数。 如果父类没有默认构造函数则编译出错。例题:Manager1.java,第四章 java 中的对象、类、包和接口,79,4.7 继 承 4.7.1 理解继承,4. 方法的重载(overloading)在同一个类中名字相同但参数个数或类型不同的方法。返回值可以不同。 例如:public void println( int i)public void println( float f)public void println( String s)见例题 MethodOverloadingTest.java,第四章 java 中的对象、类、包和接口,80,4.7 继 承 4
40、.7.1 理解继承,4. 方法的重载(overloading)构造方法也可以重载。可以在构造方法的第一条语句使用this来调用其他的构造方法。见例题 Employee.java,第四章 java 中的对象、类、包和接口,81,4.7 继 承 4.7.1 理解继承,5. 运行时多态对于重写或继承的方法,Java运行时系统根据调用该方法的实例的类型来决定选择哪个方法调用。,第四章 java 中的对象、类、包和接口,82,4.7 继 承 4.7.1 理解继承,说明: 对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法,如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法
41、。,第四章 java 中的对象、类、包和接口,83,4.7 继 承 4.7.1 理解继承,5. 运行时多态class Avoid callme( )System.out.println(“Inside As callme( ) method“); class B extends Avoid callme( )System.out.println(“Inside Bs callme( ) method“); public class Dispatchpublic static void main( String args )A a = new B( );a.callme( ); ,第四章 jav
42、a 中的对象、类、包和接口,运行结果为: C:java Dispatch Inside Bs callme( ) method,例题:,84,4.7 继 承 4.7.1 理解继承,5. 运行时多态,第四章 java 中的对象、类、包和接口,例题:,class Student public:/float calcTuition() / ; class GraduateStudent extends Student public:/float calcTuition() / ;,void fn(Student x) x.calcTuition(); void main() Student s;Gr
43、aduateStudent gs;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 中的对象、类、包和接口,public class Employee extends Object public class Manager extends Employee public
44、class Engineer extends Employee - - public void doSomething( Employee e) if (e instanceof Manager) / Process a Manager else if (e instanceof Engineer) / Process an Engineer else / Process any other type of Employee ,例如:,87,4.7 继 承 4.7.2 类 jave.lang.Object,第四章 java 中的对象、类、包和接口,类java.lang.Object处于Java
45、开发环境的类层次树的根部,其他所有的类都直接或间接地为它的子类 一个类如果没有声明继承某个类,则默认继承Object类。 public class Employee .等价于:public class Employee extends Object .,88,4.7 继 承 4.7.2 类 jave.lang.Object,第四章 java 中的对象、类、包和接口,该类定义了一些所有对象最基本的状态和行为常用的有: equals() getClass toString finalize notify notifyAll wait,89,4.7 继 承 4.7.2 类 jave.lang.Obj
46、ect,第四章 java 中的对象、类、包和接口,equals() 一般情况下需要覆盖Object中的equals()方法 例如: Integer one = new Integer (1), anotherOne = new Integer (1); if (one.equals (anotherOne) System.out.println (“objects are equal”);if (one = = anotherOne)System.out.println (“objects are equal”); elseSystem.out.println (“objects are eq
47、ual”);,90,4.7 继 承 4.7.2 类 jave.lang.Object,第四章 java 中的对象、类、包和接口,2. getClass()getClass ( )方法是final方法,它不能被重写。它返回一个对象在运行时所对应的类的表示例如下面的方法得到并显示对象的类名: void PrintClassName( Object obj )System.out.println(“ The objects class is “ + obj.getClass( ).getName( ) ); ,91,4.7 继 承 4.7.2 类 jave.lang.Object,第四章 java
48、中的对象、类、包和接口,2. getClass()可以用getClass创建一个类的实例,而不必在编译时即知道到底是哪个类。下例创建了一个与对象obj具有相同类型的一个实例, 所创建的对象可以是任何类。 Object creatNewInstanceOf (object obj) return obj.getClass( ).newInstance( ); ,92,4.7 继 承 4.7.2 类 jave.lang.Object,第四章 java 中的对象、类、包和接口,3. toString( )toString( )方法用来返回对象的字符串表示.不同的对象显示的形式也不一样。 例如: System.out.println(Thread.currentThread().toString(); 显示结果为:Threadmain,5,main int pInt = 500; Integer wInt = new Integer( pInt); System.out.println(wInt.toString(); 显示结果为:500,93,4.7 继 承 4.7.3 final数据、方法和类,第四章 java 中的对象、类、包和接口,