Jav最新实用教程 第六章接口与多态
Java最新实用教程 第六章接口与多态
Jav最新实用教程 学习目的: ■掌握接口的创建与实现 理解塑型 ■掌握多态,了解动态绑定 理解多态与构造方法 了解内部类 学习重点 接口的创建与实现 多态 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 2 ⚫ 学习目的: ▪ 掌握接口的创建与实现 ▪ 理解塑型 ▪ 掌握多态,了解动态绑定 ▪ 理解多态与构造方法 ▪ 了解内部类 ⚫ 学习重点: ▪ 接口的创建与实现 ▪ 多态
Jav最新实用教程 第六章接口与多态 本章提要: 接口 塑型 多态 多态与构造方法 内部类 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 3 第六章 接口与多态 本章提要: • 接口 • 塑型 • 多态 • 多态与构造方法 • 内部类
Jav最新实用教程 61接口 接口( interface)是抽象的概念能深入了一层。可将其想象为 个“纯”抽象类。它允许创建者规定一个类的基本形式:方 法的名称、参数列表、返回类型,但不能规定方法主体。接口 也包含了数据成员,但它们都默认为 static和 final。接口只提供 种形式,并不提供实施的细节 611接口的作用及语法 1.接口的作用 java的接口也是面向对象的一个重要机制。它的引进是为了实 现多继承,同时免除C艹中的多继承那样的复杂性。接口中的 所有方法都是抽象的,这些抽象法由实现这一接口的不同类来 具体完成。在使用中,接口类的变量可以用来代表任何实现了 该接显的桊的象,这就相当于把类根据其实现的功能来分别 代表
Java最新实用教程 2021年2月20日星期六 4 6.1接口 6.1.1接口的作用及语法 1. 接口的作用 java的接口也是面向对象的一个重要机制。它的引进是为了实 现多继承,同时免除C++中的多继承那样的复杂性。接口中的 所有方法都是抽象的,这些抽象法由实现这一接口的不同类来 具体完成。在使用中,接口类的变量可以用来代表任何实现了 该接口的类的对象,这就相当于把类根据其实现的功能来分别 代表, 接口(interface)是抽象的概念能深入了一层。可将其想象为 一个“纯”抽象类。它允许创建者规定一个类的基本形式:方 法的名称、参数列表、返回类型,但不能规定方法主体。接口 也包含了数据成员,但它们都默认为static和final。接口只提供 一种形式,并不提供实施的细节
Jav最新实用教程 而不必顾虑它所在的类继承层次。这样可以最大限度地利用动 态绑定,隐藏实现细节。接口还可以用来实现不同类之间的常 量共享。 人们常使用接口来建立类和类之间的“协议”。有些面向对象 的程序设计语言采用了名为“ protoco(协议)的关键字,它 做的便是与接口相同的事情 例61:接口举例 保险公司具有车辆保险、人员保险、公司保险等很多保险业务 这些保险业务的保险对象不同,但在对外提供服务方面具有 相似性,如都需要计算保险费( premium)等,因此可以声明 个 Insurable接口,接口中包含计算保险费所需要的方法,并 使用不同的类如车辆类、人员类等分别实现这个接口 总地来说,接口本质上是一种特殊的抽象类,目的是用来实现 多继承。接口与抽象类都是声明多个类的共同属性。但接口 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 5 而不必顾虑它所在的类继承层次。这样可以最大限度地利用动 态绑定,隐藏实现细节。接口还可以用来实现不同类之间的常 量共享。 人们常使用接口来建立类和类之间的“协议” 。有些面向对象 的程序设计语言采用了名为“protocol”(协议)的关键字,它 做的便是与接口相同的事情。 例6.1:接口举例。 保险公司具有车辆保险、人员保险、公司保险等很多保险业务 ,这些保险业务的保险对象不同,但在对外提供服务方面具有 相似性,如都需要计算保险费(premium)等,因此可以声明 一个Insurable接口,接口中包含计算保险费所需要的方法,并 使用不同的类如车辆类、人员类等分别实现这个接口。 总地来说,接口本质上是一种特殊的抽象类,目的是用来实现 多继承。接口与抽象类都是声明多个类的共同属性。但接口
Jav最新实用教程 与抽象类不同的是:接口允许在看起来不相干的类之间定义共 同行为。 2.接口的语法 使用关键字 interface来声明接口。Java接口中只有方法的声明, 而没有直接定义方法的内容。它的声明格式为: 接口修饰符] interface接口名称[ extends父类名] 方法的声明或静态常量 接口与一般类的声明基本一样,本身也具有数据成员与方法, 但数据成员一定要赋初值,且此值将不能再更改,即为fnal常 量,而方法必须为“抽象方法”,由前面5.4.2节中的抽象方法 知,抽象方法必须被修饰为 public abstract,不过在接口中成员 数据前的fnal关键字、方法的 public关键字、 abstract关键字可 以省略 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 6 与抽象类不同的是:接口允许在看起来不相干的类之间定义共 同行为。 2. 接口的语法 使用关键字interface来声明接口。Java接口中只有方法的声明, 而没有直接定义方法的内容。它的声明格式为: [接口修饰符] interface 接口名称 [extends 父类名] { …//方法的声明或静态常量 } 接口与一般类的声明基本一样,本身也具有数据成员与方法, 但数据成员一定要赋初值,且此值将不能再更改,即为final常 量,而方法必须为“抽象方法” ,由前面5.4.2节中的抽象方法 知,抽象方法必须被修饰为public abstract,不过在接口中成员 数据前的final关键字、方法的public关键字、abstract关键字可 以省略
Jav最新实用教程 可以将例6.1中的 INsurable接口声明如下 tblic inter face Insurable public int getNumbero public int get Coverage AmountO public double caculate Premium public Date get ExpiryDateO 从中可以看出,接口中的方法值提供一种形式,而没有具体实 施的细节 例62:接口应用举例 声明一个接口Shap2D,可以用它来实现二维的几何形状类 Circle和 Rectangle。对二维的几何形状而言,面积的计算是很 重要的。因此可以把计算面积的方法声明在接口里,并且 Circle类的面积计算需要常量pi,所以接口的内容就包含了常 量p和求面积的方法 可以定义出如下接口: 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 7 可以将例6.1中的Insurable接口声明如下: public interface Insurable { public int getNumber(); public int getCoverageAmount(); public double caculatePremium(); public Date getExpiryDate(); } 从中可以看出,接口中的方法值提供一种形式,而没有具体实 施的细节。 例6.2:接口应用举例。 声明一个接口Shap2D,可以用它来实现二维的几何形状类 Circle和Rectangle。对二维的几何形状而言,面积的计算是很 重要的。因此可以把计算面积的方法声明在接口里,并且 Circle类的面积计算需要常量pi,所以接口的内容就包含了常 量pi和求面积的方法。 可以定义出如下接口:
Jav最新实用教程 interface Shape2D∥声明接口 Shape 2D final double pi=3. 14 ∥,数据成员一定要初始化 public double getAreao ∥抽象方法 6.12接口的实现 前面提到,接口是一种特殊的抽象类,所以接口也不能用new 运算符直接实例化。但是可以利用接口的特性来构造新的类 再用它来创建对象。利用接口构造新类的过程,称为接口的实 现 个类如要使用一个或一组接口的特性,要使用 implements关 键字。实现接口的语法如下: public class类名[ extends父类名] implements接口名[,接口名[…] 接口中的方法实现 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 8 interface Shape2D //声明接口Shape2D { final double pi=3.14; //数据成员一定要初始化 public double getArea(); //抽象方法 } 6.1.2接口的实现 前面提到,接口是一种特殊的抽象类,所以接口也不能用new 运算符直接实例化。但是可以利用接口的特性来构造新的类, 再用它来创建对象。利用接口构造新类的过程,称为接口的实 现。 一个类如要使用一个或一组接口的特性,要使用implements关 键字。实现接口的语法如下: public class 类名 [extends 父类名] implements 接口名 [,接口名[…]] { … …//接口中的方法实现 }
Jav最新实用教程 完成接口的类必须实现接口中的所有方法,具体实现了一个接 口后,就获得了一个普通的类,可用标准方式对其进行使用或 扩展。注意在实现一个接口的时候,来自接口的方法必须声明 成 public。 例6.3:实现接口 Insurable 下面声明汽车类实现例6.1中的 Insurable接口,并且实现了接口 中的所有抽象方法 Public class Car implements Isurable∥使用接口 Insurable public int getNumbero i ∥方法体语句 public int getCoverage AmountO ∥方法体语句 public double caculate Premium i ∥方法体语句 public Date get ExpiryDateOi 方法体语句 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 9 完成接口的类必须实现接口中的所有方法,具体实现了一个接 口后,就获得了一个普通的类,可用标准方式对其进行使用或 扩展。注意在实现一个接口的时候,来自接口的方法必须声明 成public。 例6.3:实现接口Insurable。 下面声明汽车类实现例6.1中的Insurable接口,并且实现了接口 中的所有抽象方法。 Public class Car implements Isurable //使用接口Insurable { public int getNumber() { //方法体语句 } public int getCoverageAmount() { //方法体语句 } public double caculatePremium() { //方法体语句 } public Date getExpiryDate(){ //方法体语句 } }
Jav最新实用教程 例64:实现例62中的接口 Shape2D 下面声明 Circle类计算圆面积, Rectangle类计算矩形面积, 分别实现 Shape2D接口。 class Circle implements Shape2D double r public Circle(double r) thisr=r ublic double getArea()∥实现抽象方法 return(pi*r*r); class Rectangle implements Shape2D double wh public Rectangle( double width, double height) w=width h=height 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 10 例6.4:实现例6.2中的接口Shape2D。 下面声明Circle类计算圆面积,Rectangle类计算矩形面积, 分别实现Shape2D接口。 class Circle implements Shape2D { double r; public Circle(double r) { this.r=r; } public double getArea() //实现抽象方法 { return (pi*r*r); } } class Rectangle implements Shape2D { double w,h; public Rectangle(double width, double height) { w=width; h=height; }