1、类的高级特性-抽象方法1 抽象方法: 没有方法体的方法,前面要加关键词Abstract ,方法体退化为分号。比如:Abstract 返回类型 方法名(参数列表);学习目标 重点: 抽象类,接口。 界面设计的事件监听机制 了解匿名内部类 难点: 接口与抽象类区别; 匿名内部类的语法理解 抽象类包含抽象方法的类必须是个抽象类,前面要加关键词abstract .比如:abstract class classa abstract void int sum( int var1, int var2);抽象类的规则 抽象类不能实例化,也就是不能创建抽象类的对象。 抽象类可以包含普通的方法。抽象类存在的价值
2、抽象类一般被设计为基类,然后从抽象类基础上派生具体的类。 抽象类中定义了基本的成员函数,函数名称、参数、返回值等。 没有具体实现函数的细节。从抽象类继承的具体子类再对父类进行函数覆盖,从而实现了行为的多样性。飞行飞行捕食捕食捕食捕食飞行飞行捕食捕食游水游水飞行飞行抽象类的核心价值 抽象类实质上对各子类行为提供一个统一的规定。 OCP(Open-Closed Principle),抽象类是其中的关键。如果一个类中全是抽象方法,可以用另一种机制实现这种抽象类。这就是接口。类的高级特性-接口学习目标 学习重点: 接口的基本语法;并会简单应用。理解接口的意义。 学习难点:接口的意义;接口与抽象类的区别
3、。 自学任务:设计模式中的开闭法则与接口分离法则。接口为何而来? C+多重继承 class 子类名: 父类1,父类2,父类n Java是个单根继承的语言。 class 子类名 extends 父类名 Java 多重继承如何实现呢? 初识接口public interface DataInput public abstract Boolean readBoolean(); public abstract byte readByte(); public abstract double readChar();思考:你对接口的第一印象是什么?它象谁呢? 接口的概念 函数(方法)特征的集合。 或者说是一组
4、函数(方法)的声明。编译器角度: 函数特征是什么?名字名字参数的数目参数的数目参数的类型类型不包括:返回类型,参数的名字以及所抛出来的异常。接口的语法1 接口的声明:interface 接口名称 extends 父接口名 接口体; 接口体:只能由final的常量与public抽象方法组成。 接口的语法2 接口的实现:implements class 类名 extends 父类 implements 接口名 具体的例子 interface canflypublic abstract void fly ();class actor extends human implements canfly p
5、ublic void fly() 具体算法实现; .;接口的意义 从一个问题出发: 在现实领域有个抽象概念 “门” ,有两种基本行为:“开”、“关”。需求是为门增加一个“报警”功能。 如何设计呢?方案一: 直率人的思路: 门设计为一个抽象类,有两个基本成员方法。再为其增加一个报警功能,添加一个方法Alarm()。 方案一: 直率人的代码: abstract class Door abstract void open(); abstract void close(); abstract void alarm(); 方案一的反思: ,在Door的定义中把Door的概念和另外一个概念“报警器”的行为
6、方法混在了一起。 “多角色的混合”,扮演的“角色”越多,人的职责越多。“妈妈”+“老师”。 接口分离原则:ISP(Interface Segregation Principle)或者“角色分离”法则。方案一的反思: 如果这样的事情发生:项目经理通知你客户的需求改变了!需要为报警增加一个时间。 alarm() 要求一个报警时间的参数。可怕的事情发生了Alarm(time)方案二-智者的决定 角色分割思想: 将“门”和“报警”做为两个抽象概念来对待,实现分离。 门用抽象类来实现,而“报警器”用接口来实现。 方案二-智者的决定abstract class Door abstract void ope
7、n();abstract void close(); interface Alarm void alarm();class AlarmDoor extends Door implements Alarm void open() void close() void alarm() 对接口的深入理解 接口:函数(方法)的声明与实现分离。 接口:只是定义了函数(方法); 实现接口的类:真正实现了这些函数(方法)。接口:是电影中的 “角色”,比如角色 警察、小偷;实现接口的类:是 “演员”,一个演员可以扮演各种“角色”。 对接口的深入理解接口:规定了“角色”的行为或者职责。实现接口的类: 履行这些职责
8、。class AlarmDoor extends Door implements Alarm void open() void close() void alarm() 一个开心的例子-just a jokeclass ehotcup implements Alarm void hot() . void stop() void alarm() .我们家的电热杯也成了“警卫员”了抽象类 vs 接口 抽象类 :软件模式中“OCP原则”(开闭原则) 的基础。 抽象类,抽象类实现的是类型的隐藏,让人忘记具体的类型,让软件依赖抽象类后,增加了软件的可扩充性。 终极目标: “旧代码调用新代码”。 抽象类
9、vs 接口 接口没有反映“继承”思想,但确实是达到达到多重继承的一种方法。 接口比抽象类更“抽象”(为什么?) 提倡使用“接口”-interface抽象类 vs 接口-接口的缺点课下的工作 抽象类,抽象方法。教材69,76。java编程思想p230; 接口 p116-p120 ;调试、体会例题程序; 自学指导:java与模式第8章 实验任务:调试教材程序,用心体会接口存在的意义; 作业:比较接口和抽象类的相同、不同处(300字,小小论文)类的高级特性内部类 嵌套类。在类内部定义的类。(不要在名字方面在意,知道咋回事就行)匿名内部类 new SuperType (constructor parameters) SuperType 是匿名内部类的超类; 定义匿名内部类的成员变量与成员函数。作业 实验任务: 实验一、二的程序调试并理解功能。写出实验报告。 书面作业: 小论文 自学任务: 查阅相关书籍与资料