首页 第四章 java 中的对象、类、包和接口

第四章 java 中的对象、类、包和接口

举报
开通vip

第四章 java 中的对象、类、包和接口null第四章 java 中的对象、类、包和接口 第四章 java 中的对象、类、包和接口 4.1 初识对象和类 4.2 对象的生命周期 4.3 创建类 4.4 包的创建和使用 4.5 类成员的访问控制 4.6 类成员与实例成员 4.7 继承 4.8 嵌入类 Inner Classes 4.9 接口4.1 初识对象和类4.1 初识对象和类例1. 定义了一个名为SimplePoint 的类 public class SimplePoint {        pu...

第四章 java 中的对象、类、包和接口
null第四章 java 中的对象、类、包和接口 第四章 java 中的对象、类、包和接口 4.1 初识对象和类 4.2 对象的生命周期 4.3 创建类 4.4 包的创建和使用 4.5 类成员的访问控制 4.6 类成员与实例成员 4.7 继承 4.8 嵌入类 Inner Classes 4.9 接口4.1 初识对象和类4.1 初识对象和类例1. 定义了一个名为SimplePoint 的类 public class SimplePoint {        public int x = 0; //x为成员变量        public int y = 0; //y为成员变量    }      第四章 java 中的对象、类、包和接口4.1 初识对象和类4.1 初识对象和类当创建一个新的对象时(对该类实例化), 就会为该对象及其成员分配空间,同时对成员变量进行初始化。 第四章 java 中的对象、类、包和接口4.1 初识对象和类4.1 初识对象和类例2 定义一个名为SimpleRectangle类 public class SimpleRectangle {      public int width = 0;      public int height = 0;      public SimplePoint origin = new SimplePoint(); } 第四章 java 中的对象、类、包和接口4.1 初识对象和类4.1 初识对象和类当初始化origin成员时将调用代码new SimplePoint()创建一个SimplePoint对象。 第四章 java 中的对象、类、包和接口4.1 初识对象和类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; } } new Point(44, 78)第四章 java 中的对象、类、包和接口4.3 创建类4.3 创建类4.3.1 类声明 4.3.2 类体 (Class Body) 第四章 java 中的对象、类、包和接口4.3 创建类4.3 创建类一个类包括两部分: 类声明 类体 见图:13parts 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.1 类声明 4.3 创建类 4.3.1 类声明     在类的声明里,说明了类的名字及其它属性。下图说明了类声明中包含的各部分: 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.1 类声明 4.3 创建类 4.3.1 类声明 说明:    在类声明中, public、abstract、final为类的修饰符,是可选的,缺省时说明所定义的类是非public、非abstract、非final的类。 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体     类体为该类的对象提供了在生存期内需要的所有代码。包括以下几部分: 构造方法( constructor ) 成员变量( member variable )的声明 方法(Method)的实现 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 1.  构造方法 定义:类中用来初始化新建的对象的方法 称构造方法。 特点: 无返回类型, 方法名与类名相同 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 1.  构造方法 说明:<续> 构造方法可被重载。 例如: public class Thing { private int x; public Thing() { x = 47; } public Thing( int new_ x) { x = new_ x; } } 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 1.  构造方法 说明: <续> 其中变量和方法称为类的成员(成员变量和成员方法),而构造方法不是类的成员。 每个类中至少有一个构造方法。 定义类时如未定义构造方法,运行时系统会为该类自动定义缺省的构造方法。 没有任何参数 没有body 不做任何事情 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 1.  构造方法 说明: <续> 构造方法只能由new运算符调用 构造方法同样也有访问权限的限制 public protected private package 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 2.  成员变量的声明 成员变量在类体中声明,但在构造方法和方法之外 。 classDeclaration { member variable declarations constructor declarations method declarations } 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 2.  成员变量的声明 声明格式: 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 2.  成员变量的声明 说明: accessLevel: 对成员变量的访问控制,有四级访问控制:public, protected, package, private。缺省时为package。 static: 说明该变量为类变量,缺省时为实例变量。 final: 指明该变量的值不能被改变,既该变量为常量。 例 final double AVOGADRO = 6.023e23; 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 2.  成员变量的声明 说明:<续> type: 用于说明成员变量的类型。可以是基本数据类型,如int,float,boolean 等,也可以是引用类型,如数组名,类或接口名。 在同一个类中不允许有同名的成员变量,但允许成员变量名和方法名相同。 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 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 = false Timer timer; private String name = "Fred Flintstone"; }第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 3. 方法的实现 与类相似,方法的声明也包括两部分:方法声明和方法体:如下图所示: 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 3. 方法的实现 方法声明: 定义方法的属性,如访问控制级,返回值的类型,方法名字,参数等 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 3. 方法的实现 返回值:返回值的数据类型必须和声明中的返回类型一致,或者完全相同,或者是它的一个子类 。 当一个方法不需要返回值时,返回类型为void。 第四章 java 中的对象、类、包和接口public Number returnANumber() { . . . } 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 3. 方法的实现 参数传递: 1)参数的类型可以是: 简单数据类型:值传送。方法接收参数的值,但并不能改变这些参数的值 引用数据类型(数组类型、类或接口): 地址传递。传递给方法的是数据在内存中的地址, 见例题:ArgumentTest.java第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 3. 方法的实现 参数传递: 2)参数的命名: 参数名字可以与类的成员变量 相同,但参数名会隐藏成员。变量为了区别参数与类的成员变量,我们必须使用this class Circle { int x, y, radius; public Circle(int x, int y, int radius) { this.x = x; this.y = y; this.radius = radius; } } 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 3. 方法的实现 方法体: 定义:方法的实现部分,包括局部变量的声明和所有合法的java语句。 局部变量:在方法体内定义的变量称局部变量,局部变量的作用域限于方法内。如果局部变量的名字和类的成员变量的名字相同,则类的成员变量被隐藏 可以使用this 调用当前类的成员变量。 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 3. 方法的实现 例题: class Variable{ int x=0,y=0,z=0; //class member variables void init( int x, int y ){ this.x = x; this.y =y; int z=5; //local variable System.out.println("**** in init ****"); System.out.println("x = "+x+" y = "+y+" z = "+z); } } 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 4. 变量的作用域 变量的作用域指明可访问该变量的一段代码 按作用域来分,变量可以有下面几种: 局部变量 Local variable 类变量 Member variable 方法参数 Method parameter 例外处理参数 Exception-handler parameter 第四章 java 中的对象、类、包和接口 4.3 创建类 4.3.2 类体 4.3 创建类 4.3.2 类体 4. 变量的作用域 第四章 java 中的对象、类、包和接口4.2 对象的生命周期4.2 对象的生命周期创建对象 对象的使用 清除对象 第四章 java 中的对象、类、包和接口4.2 对象的生命周期4.2 对象的生命周期创建对象 通过创建一个对象可创建类的一个实例, 也称实例化此类。 例Rectangle rect = new Rectangle(); 创建一个对象包括三部分: 声名部分 实例化部分 初始化部分 第四章 java 中的对象、类、包和接口 4.2 对象的生命周期 1. 创建对象 4.2 对象的生命周期 1. 创建对象 声名对象 声明对象的名字和类型,用类名来说明对象的类型。 格式:type name 说明: 声明对象的规则与变量声明规则相同,但对象变量是引用类型; 在java里类和接口都可以作为数据类型来使用; 对象声明通知编译器name将用来引用type类型的变量 对象声明并不创建新的对象。 例: Rectangle rect;第四章 java 中的对象、类、包和接口 4.2 对象的生命周期 1. 创建对象 4.2 对象的生命周期 1. 创建对象 实例化对象 操作符new通过为新对象分配存储空间来实例化类 格式: new 类的构造方法 例 new Rectangle(100, 200); Rectangle rect = new Rectangle(100, 200);第四章 java 中的对象、类、包和接口 4.2 对象的生命周期 1. 创建对象 4.2 对象的生命周期 1. 创建对象 初始化对象 每个类都至少有一个构造函数,当创建对象时调用指定的构造函数来初始化对象 例 Rectangle rect = new Rectangle(); Rectangle rect = new Rectangle(100, 200); Rectangle rect = new Rectangle(new Point(44,78));   见例题:Rectangle.java 注:在定义类时如未定义构造函数系统,java会自动构造一个没有参数的构造函数。  第四章 java 中的对象、类、包和接口 4.2 对象的生命周期 1. 创建对象 4.2 对象的生命周期 1. 创建对象 小结: public class MyDate { private int day = 1; private int month = 1; private int year = 2000; public MyDate( int day, int month, int year) { ... } public void print() { ... } } public class TestMyDate { public static void main( String[] args) { MyDate my_ birth = new MyDate( 22, 7, 1964); }第四章 java 中的对象、类、包和接口 4.2 对象的生命周期 1. 创建对象 4.2 对象的生命周期 1. 创建对象 创建一个类对象: MyDate my_ birth = new MyDate( 22, 7, 1964); 第四章 java 中的对象、类、包和接口 4.2 对象的生命周期 1. 创建对象 4.2 对象的生命周期 1. 创建对象 两个引用变量的赋值将会产生如下结果: int x = 7; int y = x; MyDate s = new MyDate( 22, 7, 1964); MyDate t = s; t = new MyDate( 22, 12, 1964); 两个变量指向一个对象:第四章 java 中的对象、类、包和接口 4.2 对象的生命周期 1. 创建对象 4.2 对象的生命周期 1. 创建对象 当t 变量赋予一个新值时: t = new MyDate(22, 12, 1964); 两个变量分别指向两个对象:第四章 java 中的对象、类、包和接口 4.2 对象的生命周期 1. 创建对象 4.2 对象的生命周期 1. 创建对象 见例题:Assignment.java 结果: 1: n1.i: 9, n2.i: 47 2: n1.i: 47, n2.i: 47 3: n1.i: 27, n2.i: 27 将一个对象传递到方法内部时,也会产生此现象 见例题:PassObject .java 输出结果如下: 1: x.c: a 2: x.c: z 第四章 java 中的对象、类、包和接口 4.2 对象的生命周期 2. 对象的使用 4.2 对象的生命周期 2. 对象的使用 使用对象包括: 从对象中获得信息 改变对象的状态 使对象执行某些操作 实现途径: 引用对象的变量 调用对象的方法  第四章 java 中的对象、类、包和接口 4.2 对象的生命周期 2. 对象的使用 4.2 对象的生命周期 2. 对象的使用 引用对象的变量 引用对象变量的格式: 对象引用.对象的变量 例: rect.origin = new Point(15, 37); area = rect.height * rect.width; height = new Rectangle().height; 说明: 可以像使用其它变量一样来使用对象的变量。 例如: area = rect1.height *rect1.width  第四章 java 中的对象、类、包和接口 4.2 对象的生命周期 2. 对象的使用 4.2 对象的生命周期 2. 对象的使用 调用对象的方法 格式: 对象引用.对象方法名(); 或 对象引用.对象方法名(参数表); 例 rect.move(15, 37); new Rectangle(100, 50).area() 说明: 对于返回值的方法,方法调用可以用于表达式中 调用一个对象的方法即是向该对象发送一个消息.  第四章 java 中的对象、类、包和接口 4.2 对象的生命周期 3. 清除对象 4.2 对象的生命周期 3. 清除对象 java运行使系统有一个垃圾回收进程负责清除不再使用的对象。 垃圾回收器 垃圾回收器定期扫描内存,对于被应用的对象加上标记,按可能的路径扫描结束后清除未加标记的对象。 被回收的对象是: 不再被任何引用变量引用的对象 引用变量自动放弃 人为地将引用变量置为null 第四章 java 中的对象、类、包和接口 4.2 对象的生命周期 3. 清除对象 4.2 对象的生命周期 3. 清除对象 垃圾回收器 当系统的内存用尽或程序中调用System.gc()要求进行垃圾收集时,垃圾收集线程与系统同步运行。否则垃圾收集器在系统空闲时异步地执行。 第四章 java 中的对象、类、包和接口 4.2 对象的生命周期 3. 清除对象 4.2 对象的生命周期 3. 清除对象 finialize()方法 在一个对象被垃圾回收器回收之前,java解释器会自动调用对象的finalize()方法。通常在该方法内包括了释放系统资源的代码段。 finalize( )方法在类java.lang.Object中实现 如: protected void finalize ( ) throws throwable{ …… // clean up code for this class super. finalize( ); //清除对象使用的所有资源,包括由于继 //承关系而获得的资源 }  第四章 java 中的对象、类、包和接口 4.4 包的创建和使用 4.4 包的创建和使用定义: 包是一组相关的类或接口的集合, 它提供了访问保护和名字空间管理。Java编译器使用文件系统目录来保存包。 第四章 java 中的对象、类、包和接口 4.4 包的创建和使用 4.4 包的创建和使用使用包的好处: 程序员能很容易确定同一包中的类是相互关联的。 程序员能很方便地了解到在哪里可以找到能完成特定功能的类 由于每个包都创建了一个名字空间,个人创建的类名不会和其它包中的类名名发生冲突 可以使同一包中的类彼此不加限制地访问,而同时对其它包中的类提供访问控制。第四章 java 中的对象、类、包和接口 4.4 包的创建和使用 4.4 包的创建和使用1. 创建包 格式:package pkg1[.pkg2[.pkg3]]; package语句必须放在原文件的开始处。 例如: java.net java.io java.util java.lang java.applet javax.swing package graphics; public class Circle { . . . }   第四章 java 中的对象、类、包和接口 4.4 包的创建和使用 4.4 包的创建和使用1. 创建包 说明: package的作用域是整个源文件 如果在同一个源文件中定义了多个类,最多仅可以有一个类用public修饰,且源文件名必须与该类名相同 当未使用package语句时, 类和接口放在无名缺省包里 包的命名习惯:将Internet域名作为包名   例如:com.company.region.package. 第四章 java 中的对象、类、包和接口 4.4 包的创建和使用 4.4 包的创建和使用2. 包的使用 包中的所有类中只有public类能被包外部的类访问。 有三种方法访问包中的类: 1) 使用长名字引用包中的公共成员 即在类名前注明包名 例 graphics.Rectangle graphics.Rectangle myRect = new graphics.Rectangle(); 第四章 java 中的对象、类、包和接口 4.4 包的创建和使用 4.4 包的创建和使用2. 包的使用 引进包的公共成员 在文件的开始处使用import语句将指定的成员引进到当前文件中. 格式: import pkg1[.pkg2].类名 例 import graphics.Circle; Circle myCircle = new Circle();第四章 java 中的对象、类、包和接口 4.4 包的创建和使用 4.4 包的创建和使用2. 包的使用 3) 引进整个包 使用import语句引进包中的所有类和接口 格式: import pkg1[.pkg2].* 例 import graphics.*; 现在可以使用短名字来引用类graphics包中的所有类. Circle myCircle = new Circle(); Rectangle myRectangle = new Rectangle();第四章 java 中的对象、类、包和接口 4.4 包的创建和使用 4.4 包的创建和使用3. 源文件和类文件的管理 JDK利用文件系统的层次结构来管理源文件和类文件。源文件和类文件所在的目录名应与其中的类所在的包名对应,编译器和解释器按此机制来查找类。如: 第四章 java 中的对象、类、包和接口 4.4 包的创建和使用 4.4 包的创建和使用3. 源文件和类文件的管理 第四章 java 中的对象、类、包和接口 4.4 包的创建和使用 4.4 包的创建和使用3. 源文件和类文件的管理 当源文件中有多个类定义时,编译后将产生多个类文件。 第四章 java 中的对象、类、包和接口 4.4 包的创建和使用 4.4 包的创建和使用3. 源文件和类文件的管理 虽然类文件所在的目录序列必须与包名对应,但不一定与源文件在相同的目录中。 第四章 java 中的对象、类、包和接口javac –d d:\classes Rectangle.java 4.4 包的创建和使用 4.4 包的创建和使用3. 源文件和类文件的管理 (简单模式) 说明: 将主文件放在一个目录下:d:\test\package\LibTest.java 注意不是: d:\test\package\c05\LibTest.java 2)在d:\test\package下建立目录: D:\test\package\com\bruceeckel\util\Vector.java 注意:是Vector.java,不是vector.java.第四章 java 中的对象、类、包和接口简单模式简单模式直接在d:\test\package下编译:javac –d . LibTest.java 注意:javac LibTest.java 可以编译通过,但不能运行。 直接在d:\test\package下运行:java c05.LibTest简单模式(续)简单模式(续)在c:\下如何编译运行 Javac –d d:\temp –sourcepath e:\test\path e:\test\path\LibTest.java 注意:-sourcepath后的目录不是:e:\test\path\com\bruceeckel\util 运行:java –classpath d:\temp c05.LibTest 注意:不是:java d:\temp\c05\LibTest复杂模式复杂模式在d:\test下放:D:\test\package\LibTest.java 在e:\test\path下放e:\test\path\com\bruceeckel\util\Vector.java 在d:\test目录下编译和运行: javac –d . –sourcepath e:\test\path LibTest.java 运行: Java c05.LibTest 不是:java –classpath e:\test\path c05.LibTest 但在c:\下运行就需要-classpath了。null最复杂的情况: LibTest.java在e:\test\package下,com在d:\test目录下: 在c:\tools下进行调试。 javac -d c:\setup –sourcepath e:\test\package –classpath c:\setup e:\test\package\LibTest.javanull使用包时,javac必须使用“-d”且其源路径一定要使用绝对路径d:\test\sources(在任何目录下),或使用相对路径(在当前目录下)如果类文件和原文件在同一个目录下,则用”.”。格式为: javac –d 类文件路径(或 “.”)(绝对或相对),愿文件路径(绝对 或相对)null使用 import时,一定要加上”-classpath”(后跟路径),然后再加上”-d”(后跟类路径,再后源文件的路径)。 使用包时,java 命令可以使用”-classpath”(不设置CLASSPATH)时,设置CLASSPATH时,就不使用。在“-classpath”指定的目录下,也不使用该选项。null使用包时,java 命令必须在”-classpath”指定的以上目录,以下无论如何也不执行。 包对应于文件系统的目录管理方式可以帮助编译器和解释器找到程序中的类和接口存放的地方。 CLASSPATH指出用户的类库所在目录,在类路径(CLASSPATH)中只需指出包路径之上的顶层路径 CLASSPATH= . ; d:\classes 4.4 包的创建和使用 4.4 包的创建和使用3. 源文件和类文件的管理 设置类路径的方法 设置环境变量CLASSPATH(不推荐) set classpath=.;d:\classes 在调用编译器或解释器时使用-classpath选项 例 java -classpath d:\classes com.taranis.grathpics.Test 见例子:包的使用.txt 第四章 java 中的对象、类、包和接口nulljava –classpath d:\package\test c05.LibTest d:\package\test 是Main函数所在的文件所在的目录(很多人都任为是Import指向的文件所放的目录) 在java命令中是不用指明Import所指向文件的路径,如果在所有的类文件基于同同一个根目录,否则用classpath. 在d:\temp: java –classpath e:\test\package\source(import 指向类文件根目录); e:\lecture(main所在的类的跟目录) c05.LibTest 只有javac中才考虑import所指向的文件的路径.null但是javac也不考虑,因为它要求一定要把Import文件所指向的文件的根目录(import com.edu.cn.*,com目录)放在main函数所在文件的同一个目录下. 而且编译的时候,一定要把目录放到main函数所在的目录,否则,找不到com. 否则要使用-sourcepath.(在d:\temp目录下. javac –d d:\classes –sourcepath e:\test\package\source LibTest.java 只有在-d 后面加上-classpath <路径: import指向的路径的根目录> 才能在-d 后的路径中创建import指向的路径的类文件. 4.5 类成员的访问控制 4.5 类成员的访问控制在java语言中对类的成员有四种级别的访问控制:private, protected, public, package. 如定义类时未指定访问控制说明符,则其访问控制级别为package。 第四章 java 中的对象、类、包和接口 4.5 类成员的访问控制 4.5 类成员的访问控制例题见:访问权限.txt第四章 java 中的对象、类、包和接口 4.6 类成员与实例成员 4.6 类成员与实例成员 在类中声明一个变量或方法时,还可以指定它为实例成员或类成员。如下的格式: [static] type classVar; [static] returnType classMethod ( [paramlist] ){ …… }第四章 java 中的对象、类、包和接口 4.6 类成员与实例成员 4.6 类成员与实例成员 类变量与实例变量 二者区别: 运行时系统在首次遇到类变量时就为类变量存储空间;而当创建类的实例对象时才为实例变量分配存储空间。 不管有多少类的实例,类变量只有一份拷贝,即所有实例共享相同的类变量;而每个实例对象都有自己的实例变量。 实例变量只能通过对象来访,而类变量既可以通过类名来访问,也可以通过实例对象来访问。   第四章 java 中的对象、类、包和接口 4.6 类成员与实例成员 4.6 类成员与实例成员 类方法与实例方法 二者区别: 实例方法即能访问当前对象的实例变量也能访问类变量;类方法只能访问类变量而不能访问实例变量。 实例方法只能由实例对象来调用而类方法即可以由实例对象调用也可以由类名直接调用。  见例题:MemberTest.java 第四章 java 中的对象、类、包和接口 4.6 类成员与实例成员 4.6 类成员与实例成员 说明: 可用static来定义全局变量和全局方法,这时由于类成员仍然封装在类中,与C、C++相比,可以限制全局变量和全局方法的使用范围而防止冲突。 一个类的main( )方法必须要用static来修饰,也是因为Java运行时系统在开始执行一个程序前,并没有生成类的一个实例,它只能通过类名来调用main( )方法作为程序的入口。 通常,static与final一起使用来指定一个常量 如:protected static final String DISABLE = "disable";第四章 java 中的对象、类、包和接口 4.6 类成员与实例成员 4.6 类成员与实例成员 初始化类变量和实例变量 (Instance and Class Members) 可以在类中声明的时候初始化 class BedAndBreakfast { static final int MAX_CAPACITY = 10; //类变量 boolean full = false; float f = 3.14f; Depth o = new Depth(); //引用类型 int i = f(); //通过调用一个方法来提供初始值 } 第四章 java 中的对象、类、包和接口 4.6 类成员与实例成员 4.6 类成员与实例成员 初始化类变量和实例变量 实例变量:在构造方法中进行初始化。 class Counter { int i; Counter(j) { i = j; } // . . . 第四章 java 中的对象、类、包和接口 4.6 类成员与实例成员 4.6 类成员与实例成员 初始化类变量和实例变量 类变量:类初始块中进行初始化。 class Spoon { static int i; static { i = 47; } // . . . 这段代码仅执行一次——首次生成那个类的一个对象时,或者首次访问属于那个类的一个static成员时(即便从未生成过那个类的对象)。 见例题:ExplicitStatic.java第四章 java 中的对象、类、包和接口 4.6 类成员与实例成员 4.6 类成员与实例成员 初始化类变量和实例变量 说明: 类初始块不能在任何方法内。 类初始块只执行一次 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7 继 承4.7.1 理解继承 4.7.2 类 jave.lang.Object 4.7.3 final类和方法 4.7.4 abstract类和方法 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承父类、子类和继承 成员变量的隐藏和方法的重写 super关键字 方法的重载 运行时多态 instanceof 操作符 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承 第四章 java 中的对象、类、包和接口父类、子类和继承 例子: 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承父类、子类和继承 定义: 子类:继承而得到的类为子类 。子类继承父类的状态和行为,同时也可以修改父类的状态或重写父类的行为,并添加新的状态和行为 父类:被继承的类为父类,父类包括所有直接或间接被继承的类 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承父类、子类和继承 Java语言是单继承机制 ,不支持多重继承 单继承是代码更加可靠。 接口可以提供多继承功能。 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承 第四章 java 中的对象、类、包和接口 交通工具 汽车 卡车旅行车 小汽车 轿车 跑车 面包车父类、子类和继承 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承父类、子类和继承 Java中,所有的类都是通过直接或间接地继承java.lang.Object得到的 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承父类、子类和继承 创建子类   通过在类的声明中加入extends子句来创建一个类的子类,其格式如下: class SubClass extends SuperClass { …… } 说明:如果缺省extends子句,则该类为java.lang.Object的子类 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承父类、子类和继承 子类能够继承什么? 子类能够继承父类中public和protected的成员。 子类能够继承父类中没有访问控制的成员,只要子类和父类在同一个包内。 子类不能继承父类隐藏的成员变量和重写的父类方法 子类不能继承父类中private成员。 子类不能继承父类中构造方法。因为构造方法不是类的成员 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承成员变量的隐藏和方法的重写 变量的隐藏:子类中声明了和父类同名的变量,父类的成员变量被隐藏。 方法的重写:子类中定义了与父类相同的方法, 则父类的方法被重写。第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承成员变量的隐藏和方法的重写 例题: class SuperClass{ int x; …… void setX( ){ x = 0; } …… }第四章 java 中的对象、类、包和接口class SubClass extends SuperClass{ int x; //hide x in SuperClass …… void setX( ){ //overload x = 5; } …… } 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承成员变量的隐藏和方法的重写 说明: 重写的方法和父类中被重写的方法要具有相同的名字,相同的参数表和相同的返回类型 子类通过成员变量的隐藏和方法的重写可以把父类的状态和行为改变为自身的状态和行为 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承例题:方法的重写 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承成员变量的隐藏和方法的重写 说明:<续> 子类中不能重写父类中的final method 子类中必须重写父类中的abstract method, 否则子类也为抽象类。 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承3. super 关键字 super用来引用当前对象的父类, super来实现对父类成员的访问。 应用: 子类在隐藏了父类的成员变量或重写了父类的方法后,常常还要用到父类的成员 在重写的方法中使用父类中被重写的方法以简化代码的编写 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承3. super 关键字 super的使用有三种情况: 用来访问父类被隐藏的成员变量,如: super.variable 用来调用父类中被重写的方法,如: super.Method ( [paramlist] ); 用来调用父类的构造函数,如 super( [paramlist] ); 例题:inheritance.java,Manager.java 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承3. super 关键字 说明: 用来调用父类的构造函数super( [paramlist] )必须放在子类构造方法的句首。 如果子类没有明确的调用父类的构造函数,编译器会自动的调用super()语句,它调用父类的默认构造函数。 如果父类没有默认构造函数则编译出错。 例题:Manager1.java第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 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 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承4. 方法的重载(overloading) 构造方法也可以重载。可以在构造方法的第一条语句使用this来调用其他的构造方法。 见例题 Employee.java第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承5. 运行时多态 对于重写或继承的方法,Java运行时系统根据调用该方法的实例的类型来决定选择哪个方法调用。 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承说明: 对子类的一个实例,如果子类重写了父类的方法,则运行时系统调用子类的方法, 如果子类继承了父类的方法(未重写),则运行时系统调用父类的方法。第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承5. 运行时多态 class A{ void callme( ){ System.out.println("Inside A's callme( ) method"); }}   class B extends A{ void callme( ){ System.out.println("Inside B's callme( ) method"); }}   public class Dispatch{ public static void main( String args[ ] ){ A a = new B( ); a.callme( ); } }  第四章 java 中的对象、类、包和接口运行结果为: C:\>java Dispatch Inside B's callme( ) method   例题: 4.7 继 承 4.7.1 理解继承 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=new Student(); GraduateStudent gs=new GraduateStudent() ; fn(s); fn(gs); } 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承例题:Shapes.java 为什么要上溯到父类呢? 我们可以从以下例题中找到答案: 在程序中,如果一个类包含了自己,它就可以在任何地方代替自己 例题:music.java 例题:music1.java 第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.1 理解继承 4.7 继 承 4.7.1 理解继承6. instanceof 操作符 用来判断对象属于哪个类  第四章 java 中的对象、类、包和接口public class Employee extends Object public class Manager extends Employee public 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 } 例如: 4.7 继 承 4.7.2 类 jave.lang.Object 4.7 继 承 4.7.2 类 jave.lang.Object 类java.lang.Object处于Java开发环境的类层次树的根部,其他所有的类都直接或间接地为它的子类 一个类如果没有声明继承某个类,则默认继承Object类。 public class Employee { ... } 等价于: public class Employee extends Object { ... }第四章 java 中的对象、类、包和接口 4.7 继 承 4.7.2 类 jave.lang.Object 4.7 继 承 4.7.2 类 jave.lang.Object 该类定义了一些所有对象最基本的状态和行为常用的有: equals()
本文档为【第四章 java 中的对象、类、包和接口】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_509363
暂无简介~
格式:ppt
大小:673KB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2011-11-09
浏览量:39