Java程序设计@第05章_抽象类与接口课件

上传人:我*** 文档编号:139201789 上传时间:2020-07-20 格式:PPTX 页数:38 大小:321.64KB
返回 下载 相关 举报
Java程序设计@第05章_抽象类与接口课件_第1页
第1页 / 共38页
Java程序设计@第05章_抽象类与接口课件_第2页
第2页 / 共38页
Java程序设计@第05章_抽象类与接口课件_第3页
第3页 / 共38页
Java程序设计@第05章_抽象类与接口课件_第4页
第4页 / 共38页
Java程序设计@第05章_抽象类与接口课件_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《Java程序设计@第05章_抽象类与接口课件》由会员分享,可在线阅读,更多相关《Java程序设计@第05章_抽象类与接口课件(38页珍藏版)》请在金锄头文库上搜索。

1、Java程序设计,第05章 抽象类与接口,本章内容,CORE-C05-01 抽象类 CORE-C05-02 接口 CORE-C05-03 JDK常见接口 CORE-C05-04 内部类,本章目标,1、掌握抽象方法和抽象类的基本语法和特点; 2、能熟练使用抽象类进行程序开发; 3、掌握接口的基本语法和特点; 4、能抽象接口并在程序中使用接口; 5、实现并使用JDK常见接口; 6、掌握内部类和匿名类; 7、掌握面向抽象的设计原则 8、掌握对象的组合 9、掌握对象数组,第01节 抽象类,知识点预览,1、抽象类与抽象方法,在Java语法中引入了抽象类的概念。 有抽象方法的类就是抽象类。 为了区别于普通

2、类,抽象类必须使用abstract修饰。 用关键字abstract修饰的类称为abstract类(抽象类),用关键字abstract修饰的方法称为abstract方法(抽象方法); abstract类中可以有abstract方法(抽象方法)也可以有非abstract方法。 抽象类可以有构造器,但不能在new后使用抽象类构造器。就是抽象类不能创建对象。,abstract class MouseListener extends EventListener /成员变量 / 成员方法 protected abstract 返回类型 方法名(参数类型 参数名 , ); ,2、抽象类与多态,abstrac

3、t类只关心操作,但不关心这些操作具体实现的细节,可以使程序的设计者把主要精力放在程序的设计上,而不必拘泥于细节的实现上。 使用多态进行程序设计的核心技术之一是使用上转型对象,即将abstract类声明对象作为其子类的上转型对象,那么这个上转型对象就可以调用子类重写的方法。,3、抽象类的应用举例,题目:宠物 “发声”模拟器 要求:可以输出许多宠物的信息。输出格式为:我是一只狗。我叫乐乐,是一只白色的牧羊犬。我会汪汪叫。,宠物 “发声”模拟器,Pet,+cry():void,#breed:String #color:String #name:String,Dog,+cry():void,Cat,+

4、cry():void,+cry():void +speak():void,Dog,+cry():void,Cat,+cry():void,+speak():void,Pet,+cry():void,#breed:String #color:String #name:String,宠物 “发声”模拟器,Pet,+cry():void +speak():void,#breed:String #color:String #name:String,Dog,+cry():void,Cat,+cry():void,Simulator,+playSound(Pet pet):void,TestSimulat

5、or,+main(String args):void,Parrot,+cry():void,面向扩展 开 放,面向修改 关 闭,第02节 接口,知识点预览,1、接口的特性,Java语法中提出接口的语法是为了解决如下问题: 多重继承性: 由于Java是单重继承的语言,但为了实现上述特性,所以Java提出了一种不同的继承关系:接口实现。接口的实现采用多种继承。 多态性: 一个接口的方法是空的,以保证接口的方法被实现,而且可以有多种实现,这种多种实现称为多态。 隐藏性: 根据不同的调用需求,根据类型暴露相应的接口,把实现细节隐藏起来。 Java接口(Interface): 是一系列方法的声明,是一些

6、方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(称为多态)。,2、接口的语法-1,接口的语法: 注意:接口使用interface关键字,但接口也是一个特殊的类。 接口也可以单独保存成文件,接口名与文件名一样。 接口中的方法不能有方法体(称为抽象方法),static的方法也不行。 接口中不能有成员变量。 接口中方法默认是public与abstract的,所以修饰符public与abstract修饰不修饰都一样,不能使用其他访问限制修饰符(protected,private)。 接口的所有方法都是抽象方法,所有接口默认

7、也是abstract的,也可以使用abstract修饰,效果与没有使用abstract一样。 接口中方法不能使用static修饰。 接口本身不能使用static修饰。 接口不能有构造器,所以也不能使用接口创建对象。,abstract interface 接口名 publicabstract 返回类型 方法名(参数类型 1 参数名1, ); ,2、接口的语法-2,接口不允许成员变量: 但该数据域不是成员变量。 接口中的数据域默认是static与final的,final的量必须在定义的时候初始化。,abstract interface 接口名 int m_a=0; int m_b;/语法错误。 ,

8、2、接口的语法-3,接口支持多重继承 接口继承也是使用extends关键字。 继承的接口方法也是public与abstract的。 如果与接口中的接口方法有重复的,则该方法归并成一个。,abstract interface 接口名 extends 接口1,接口2, ,3、接口的实现-1,接口中的方法没有方法体、都是抽象方法、没有实现的方法,所以接口的价值必须要通过接口中方法的实现来达到。 接口的实现必须有类来实现。 接口实现的语法 注意: 接口实现的强制性语法约束:如果类实现了接口,则必须实现接口中的所有方法。如果有方法没有被实现,则编译时会报语法错误。 类对接口的实现遵循类中关于继承的语法规

9、则。 继承后方法的访问修饰符必须强于等于父类中的方法,所以继承类必须使用public修饰。,class 类名 implements 接口1,接口2, ,3、接口的实现-2,接口的可插入性 implemets如果存在的话必须在最后,不能在extends前。,interface IBiz /接口 void charge(); boolean withdraw(double amount); class ClsA /父类 class ClsB extends ClsA implements IBiz/插入接口实现,不影响父类 public void charge() public boolean w

10、ithdraw(double amount) ,3、接口的实现-3,契约性与稳定性,interface IBiz /接口 void charge(); boolean withdraw(double amount); class ClsA implements IBiz/必须实现接口中所有方法 public boolean withdraw(double amount) /编译错误,因为没有实现charge方法,因为实现接口等同于履行契约,必须忠实实现接口中所有约定的方法。,3、接口的实现-4,隐藏性 接口也是类,其中的方法被实现,也是override的范畴。 接口可以作为父类型来使用,根据类

11、型的访问原则,当使用接口定义对象的时候,接口只暴露与这个接口类型有关的方法,而其他接口的方法被隐藏起来。,interface IBiz /接口 void charge(); boolean withdraw(double amount); interface IDao boolean insert(); boolean update(); boolean query(); class ClsA implements IBiz, IDao . /分别实现IBiz与IDao中的 接口方法。 IBiz obiz=new ClsA(); obiz.charge();/只能访问IBiz中的方法。其他父类

12、与接口的方法被隐藏 IDao odao=new ClsA(); dao.insert();/只能访问IDao中的方法 。其他父类与接口的方法被隐藏,3、接口的实现-5,接口的多态性 接口的多态性,体现在可以降低类之间的耦合度。,interface IBiz /接口 void charge(); class ClsA implements IBiz/实现1 public void charge() /实现1 class ClsB implements IBiz/实现2 public void charge() /实现2 class ClsCall static public void call(

13、IBiz biz)/方法参数使用接口 biz.charge(); IBiz obiz=new ClsA();/new ClsB();/改变不同的实现,不影响ClsCall。 ClsCall.call(obiz);,ClsA与ClsCall的没有直接的关系, 耦合度降低。,4、抽象类与接口-1,有了抽象类后,实现接口的类不再需要实现每个方法,这就必须使用抽象类。 因为没有实现的方法还是抽象方法,所以类就必须是抽象类。,interface IBiz /接口 void charge(); boolean withdraw(double amount); abstract class ClsA imp

14、lements IBiz/只实现接口中某些方法。 public boolean withdraw(double amount) ,4、抽象类与接口-2,abstract类和接口都可以有abstract方法。 接口中只可以有常量,不能有变量;而abstract类中既可以有常量也可以有变量。 abstract类中也可以有非abstract方法,接口不可以。,注意: 是否需要把抽象类中的抽象方法单独抽取出来形成接口?这个需要根据项目的设计来决定。 抽象方法与其他成员方法与成员变量有关联的话,考虑抽象类。 抽象方法与其他成员方法与成员变量没有关联的话,考虑接口。,5、适配器类,由于类实现接口,必须实现

15、所有的接口方法,这对程序员很不方便,Java语言中提出了适配器的概念来解决。 所谓适配器就是实现接口,并对接口中的接口方法提供空实现。 空实现就是有方法体,但方法体中基本上不提供任何有效代码。,interface IBiz /接口 void charge(); boolean withdraw(double amount); class BizAdapter implements Ibiz/适配器类 public void charge() public boolean withdraw(double amount) return false; class BizImpl extends Bi

16、zAdapter/通过适配器值需要实现需要的接口方法 public void charge() /接口方法的真正实现。 ,第03节 JDK常见接口,知识点预览,1、克隆接口,Cloneable接口 Cloneable接口没有接口方法,但实现Cloneable接口后,可以使用来自Object的clone方法。 如果类没有实现Cloneable接口,在调用Object的clone方法会抛出CloneSupportedException异常。 Object的clone方法会提供对象的字段到字段的拷贝。 Object的clone是浅度克隆。 浅度克隆是成员如果是引用的话,只是克隆引用,但克隆前后的引用是指向同一个数据空间。 如果想深度克隆,则必须重载clone方法。,protected Object clone()throws CloneNotSupportedException;,2、事件接口,在JDK中基本上GUI的动作交互都是使

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号