1、本章目标本章目标理解面向对象程序设计的思想理解面向对象程序设计的思想掌握与面向对象的封装性相关的基本概念掌握与面向对象的封装性相关的基本概念掌握与面向对象的继承性相关的基本概掌握与面向对象的继承性相关的基本概掌握与面向对象的多态性相关的基本概念掌握与面向对象的多态性相关的基本概念第第3章章 类、类的继承和接口类、类的继承和接口 3.1 类类 3.2 包的创建和使用、源文件结构包的创建和使用、源文件结构 3.3 类的继承和多态类的继承和多态 3.4 接口和接口的实现接口和接口的实现 3.5 内部类和匿名内部类内部类和匿名内部类3.1 类类 3.1.1 类的修饰符类的修饰符 3.1.2 类的成员类
2、的成员 3.1.3 域、域的访问控制修饰符和其他修饰符域、域的访问控制修饰符和其他修饰符 3.1.4 静态方法、抽象方法和最终方法静态方法、抽象方法和最终方法 3.1.5 构造方法构造方法 3.1.6 关键字关键字this 3.1.7 抽象和封装抽象和封装 3.1.8 对象的清除对象的清除3.1 类类 3.1.1 类的修饰符类的修饰符修饰符修饰符1 class 类名类名 extends 父类名父类名 implements 接口名列表接口名列表 修饰符修饰符2 类型名类型名 域名域名;public 类名类名(参数列表参数列表)/;修饰符修饰符3 返回值类型返回值类型 方法名方法名(参数列表参数列
3、表)throws 异常异常/;修饰符修饰符1:public、abstract|final修饰符修饰符2:public|protected|private、static、fianl、transient、volatile修饰符修饰符3:public|protected|private、static、fianl|abstract、synchronized、native3.1 类类 3.1.2 类的成员类的成员 域:也称属性、字段、成员变量。域:也称属性、字段、成员变量。方法方法 内部类内部类3.1 类类 3.1.3 域、域的访问控制修饰符和其他修饰符域、域的访问控制修饰符和其他修饰符 域的初始化域的
4、初始化 声明其他类对象作为一个类的域声明其他类对象作为一个类的域 域的访问控制域的访问控制 封装和公开封装和公开 静态域静态域 最终域最终域 域的声明格式域的声明格式3.1 类类 3.1.3 域、域的访问控制修饰符和其他修饰符域、域的访问控制修饰符和其他修饰符 域的初始化域的初始化 All reference typenull byte、short、int0 long0L float0.0F double0.0D charu0000 booleanfalse;例例3.1(Page94):TestBirthdy.java3.1 类类 3.1.3 域、域的访问控制修饰符和其他修饰符域、域的访问控制
5、修饰符和其他修饰符 声明其他类对象作为一个类的域声明其他类对象作为一个类的域例例3.2(Page96):):TestPerson.java与与Person.java3.1 类类 3.1.3 域、域的访问控制修饰符和其他修饰符域、域的访问控制修饰符和其他修饰符 域的访问控制域的访问控制 封装和公开封装和公开访问权限修饰符访问权限修饰符类类子类子类包包其它类其它类privateXdefaultXXprotectedXXXpublicXXXX3.1 类类 3.1.3 域、域的访问控制修饰符和其他修饰符域、域的访问控制修饰符和其他修饰符 域的访问控制域的访问控制 封装和公开封装和公开 为了实现良好的封
6、装性,通常将类的域声明为为了实现良好的封装性,通常将类的域声明为private,再通过再通过public的方法来对这个域进行访的方法来对这个域进行访问。问。例例3.3(Page98)3.1 类类 3.1.3 域、域的访问控制修饰符和其他修饰符域、域的访问控制修饰符和其他修饰符 静态域静态域 所有对象共享的所有对象共享的域,也称域,也称类变量类变量(区别于(区别于),用),用static修饰,可通过对象名或修饰,可通过对象名或类名访问类名访问。例例3.4(Page100):):TestCar.java与与Car.java不能把任何方法体中的变量不能把任何方法体中的变量(局部变量)声明为静态的!(
7、局部变量)声明为静态的!注意注意3.1 类类 3.1.3 域、域的访问控制修饰符和其他修饰符域、域的访问控制修饰符和其他修饰符 最终域最终域 public static final 类型类型 常量名常量名=初始值;初始值;最终域的值一旦确定就不能重新赋值!最终域的值一旦确定就不能重新赋值!一般通过类名引用最终域。一般通过类名引用最终域。域的声明格式域的声明格式3.1 类类 3.1.4 静态方法、抽象方法和最终方法静态方法、抽象方法和最终方法 方法的定义格式方法的定义格式 方法的访问控制修饰符方法的访问控制修饰符 静态方法静态方法 最终方法最终方法 抽象方法抽象方法3.1 类类 3.1.4 静态
8、方法、抽象方法和最终方法静态方法、抽象方法和最终方法 静态方法静态方法 有时希望有时希望不创建对象不创建对象就能就能调用调用某个方法某个方法 调用静态方法的格式:调用静态方法的格式:类名类名.静态方法静态方法或者或者对象名对象名.静态方法静态方法 例例3.5(Page103):):UseStaticVar.java3.1 类类 3.1.4 静态方法、抽象方法和最终方法静态方法、抽象方法和最终方法 静态方法静态方法 在静态方法里只能在静态方法里只能直接调用同类直接调用同类中其他的静态成中其他的静态成员,而不能员,而不能直接调用同类直接调用同类中的非静态成员。中的非静态成员。静态方法不能以任何方式
9、引用静态方法不能以任何方式引用this和和super关键字。关键字。注意注意3.1 类类 3.1.4 静态方法、抽象方法和最终方法静态方法、抽象方法和最终方法 最终方法最终方法 用关键字用关键字final修饰的方法,不能被重写修饰的方法,不能被重写/覆盖覆盖(Page104)。)。抽象方法抽象方法 用关键字用关键字abstract修饰的方法,只有方法头,修饰的方法,只有方法头,没没有方法体有方法体。左、右花括号左、右花括号+左、右左、右花括号之间的部分,花括号之间的部分,均用分号代替!均用分号代替!3.1 类类 3.1.5 构造方法构造方法 构造方法的规则:构造方法的规则:Page105 构造
10、方法的重载构造方法的重载 例例3.6(Page106):):TestBirthday.java与与Birthday.java3.1 类类 3.1.6 关键字关键字this 含义及使用:含义及使用:Page107 例例3.6(Page107):):TestBirthday.java与与Birthday.java3.1 类类 3.1.7 抽象和封装抽象和封装 3.1.8 对象的清除对象的清除 垃圾回收器垃圾回收器 System.gc();3.2 包的创建和使用、源文件结构包的创建和使用、源文件结构 3.2.1 包包 3.2.2 创建包和使用包中的类创建包和使用包中的类 3.2.3 源文件结构和程序
11、说明文档的生成源文件结构和程序说明文档的生成3.2 包的创建和使用、源文件结构包的创建和使用、源文件结构 3.2.1 包包 Java通过引入包通过引入包(package)机制,提供类的多层类命机制,提供类的多层类命名空间,来解决类的命名冲突问题。名空间,来解决类的命名冲突问题。完整的类名是:包名完整的类名是:包名.类名。类名。类及类成员的访问:类及类成员的访问:Page110。3.2 包的创建和使用、源文件结构包的创建和使用、源文件结构 3.2.2 创建包和使用包中的类创建包和使用包中的类 package语句语句package 包名包名.下一级包名下一级包名.;javac命令中的命令中的-d选
12、项选项 import语句语句 import 包名包名.类名类名;import 包名包名.*;3.2 包的创建和使用、源文件结构包的创建和使用、源文件结构 3.2.3 源文件结构和程序说明文档的生成源文件结构和程序说明文档的生成Page 1133.3 类的继承和多态类的继承和多态 3.3.1 类的包含关系和继承关系类的包含关系和继承关系 3.3.2 类成员的继承和重新定义类成员的继承和重新定义 3.3.3 子类对父类构造方法的调用子类对父类构造方法的调用关键字关键字super 3.3.4 父类和子类对象的转换父类和子类对象的转换 3.3.5 抽象类和最终类抽象类和最终类3.3 类的继承和多态类的
13、继承和多态 3.3.1 类的包含关系和继承关系类的包含关系和继承关系汽车汽车发动机发动机车轮车轮方向盘方向盘Has-A(包含)关系(包含)关系红星苹果红星苹果红富士苹果红富士苹果苹果苹果梨梨水果水果Is-A(继承)关系(继承)关系3.3 类的继承和多态类的继承和多态 3.3.2 类成员的继承和重新定义类成员的继承和重新定义例例3.10(P113)、例、例3.11(P119)与例与例3.12(P120)定义子类的格式:定义子类的格式:extends关键字关键字 类成员的继承类成员的继承 子类拥有父类所有子类拥有父类所有非私有非私有变量变量(/域域)和方法的和方法的使用权使用权。子类添加成员子类添
14、加成员3.3 类的继承和多态类的继承和多态 3.3.2 类成员的继承和重新定义类成员的继承和重新定义 重新定义从父类继承来的成员重新定义从父类继承来的成员 方法覆盖的规则方法覆盖的规则 变量隐藏:可通过变量隐藏:可通过”super.变量名变量名”引用父类同名变量。引用父类同名变量。方法覆盖方法覆盖 定义:子类有与父类同名的方法。定义:子类有与父类同名的方法。规则:规则:Page118 子类的方法名、返回值类型、子类的方法名、返回值类型、参数列表参数列表与父类与父类一样一样 访问控制级别:子类不能比父类更严格(宽松性:访问控制级别:子类不能比父类更严格(宽松性:publicprotected默认
15、默认private)异常:子类不多于父类异常:子类不多于父类3.3 类的继承和多态类的继承和多态 3.3.3 子类对父类构造方法的调用子类对父类构造方法的调用关键字关键字super(例例3.13、例、例3.14)super.变量名变量名 引用被子类隐藏的变量引用被子类隐藏的变量 super.方法名方法名 调用被子类覆盖的父类的方法调用被子类覆盖的父类的方法 super(参数列表参数列表)子类构造方法调用父类构造方法子类构造方法调用父类构造方法super(参数列表参数列表)必须是子类构造方法中的第一个语句!必须是子类构造方法中的第一个语句!不能与不能与this(参数列表参数列表)同时出现在构造方
16、法中!同时出现在构造方法中!注意注意3.3 类的继承和多态类的继承和多态 3.3.4 父类和子类对象的转换父类和子类对象的转换gouGouIs yanJing an Animal?Is yanJing a Dog?Animal yanJing=new Dog();Dog gouGou=(Dog)yanJing;yanJing父类父类子类子类3.3 类的继承和多态类的继承和多态 3.3.4 父类和子类对象的转换父类和子类对象的转换Is yanJing an Animal?Is yanJing a Dog?Animal yanJing=new Cat();Dog gouGou=(Dog)yanJi
17、ng;yanJing3.3 类的继承和多态类的继承和多态 3.3.4 父类和子类对象的转换父类和子类对象的转换gouGouAnimal yanJing=new Dog();if(yanJing instanceof Dog)Dog gouGou=(Dog)yanJing;yanJingIs yanJing a Dog?instanceofyanJing.shout();shout()3.3 类的继承和多态类的继承和多态 3.3.5 抽象类和最终类抽象类和最终类 抽象类抽象类 由由abstract修饰的类,只能做父类,不能实例化。修饰的类,只能做父类,不能实例化。最终类最终类 由由final修饰
18、的类,不能做父类。修饰的类,不能做父类。3.4 接口和接口的实现接口和接口的实现 3.4.1 接口概述接口概述 3.4.2 自定义接口和实现接口自定义接口和实现接口 3.4.3 Java类库中的接口实现举例类库中的接口实现举例3.4 接口和接口的实现接口和接口的实现 3.4.2 自定义接口和实现接口自定义接口和实现接口 自定义接口自定义接口public interface 接口名称接口名称 extends 父接口名列表父接口名列表 /静态常量静态常量 public static final 数据类型数据类型 变量名变量名=常量值;常量值;/抽象方法抽象方法 public abstract 返回
19、值类型返回值类型 方法名方法名(参数列表参数列表);3.4 接口和接口的实现接口和接口的实现 3.4.2 自定义接口和实现接口自定义接口和实现接口 实现接口实现接口修饰符修饰符 class 类名类名 extends 父类名父类名 implements 接口接口A,接接口口B,类的成员变量和成员方法;类的成员变量和成员方法;为接口为接口A中的所有方法编写方法体,实现接口中的所有方法编写方法体,实现接口A;为接口为接口B中的所有方法编写方法体,实现接口中的所有方法编写方法体,实现接口B;3.4 接口和接口的实现接口和接口的实现 3.4.2 自定义接口和实现接口自定义接口和实现接口 接口实现举例接口
20、实现举例Assembler.java思考:如果思考:如果SoundCard类中具有类中具有PCI接口中的所有方接口中的所有方法,但没有明确声明它实现了法,但没有明确声明它实现了PCI接口,接口,SoundCard的对象实例能不能直接传递给的对象实例能不能直接传递给MainBoard的的usePCICard方法使用?方法使用?3.5 内部类和匿名内部类内部类和匿名内部类要点总结要点总结 类的定义(类的定义(private/public成员、成员、this、常量)、常量)对象的创建与使用(构造方法、对象的创建与使用(构造方法、new、域选择运、域选择运算符)算符)包的声明与引用包的声明与引用 类的继承(类的继承(extends、super)、方法覆盖()、方法覆盖(/重重载)、对象类型转换载)、对象类型转换 接口的定义与实现接口的定义与实现