Interfaces and c9(接与类 类(Cass是Java语言编程的基本单位,但并不是面 向对象设计(OOD)的基本单位,因为类不仅提供 设计,而且提供了实现 面向对象设计的基本单位是类型(Type),类型只关 注行为的需求,并不限制行为的具体实现 Java语言使用接囗( Interface来定义类型,接口只 提供方法的声明,并不提供方法的实现,方法的 实现由接口的实现类提供 在Java语言中,接口是一种纯粹的设计组件
Interfaces and Classes (接口与类) • 类(Class)是Java语言编程的基本单位,但并不是面 向对象设计(OOD)的基本单位,因为类不仅提供 设计,而且提供了实现 • 面向对象设计的基本单位是类型(Type),类型只关 注行为的需求,并不限制行为的具体实现 • Java语言使用接口(Interface)来定义类型,接口只 提供方法的声明,并不提供方法的实现,方法的 实现由接口的实现类提供 • 在Java语言中,接口是一种纯粹的设计组件
单亲继承与多亲继承 Java语言中,类( Class)只支持单亲继承, 个类只能有唯一的父类 Java语言中,接口( Interface)可支持多亲继 承,一个接口可以有多个父接口,子接口拥 有所有父接口中声明的方法
单亲继承与多亲继承 • Java语言中,类(Class)只支持单亲继承,一 个类只能有唯一的父类 • Java语言中,接口(Interface)可支持多亲继 承,一个接口可以有多个父接口,子接口拥 有所有父接口中声明的方法
Supertypes and Subtypes 个类的父类和实现的所有接口都称为这个 类的超类型( Supertype),而这个类称为其超 类型的子类型( Subtype) 子类型的对象引用可以造型成其任意超类型 (类或接口)的对象引用,这就是对象的多态 性 通过接口类型的对象引用只能访问接口中声 明的成员
Supertypes and Subtypes • 一个类的父类和实现的所有接口都称为这个 类的超类型(Supertype),而这个类称为其超 类型的子类型(Subtype) • 子类型的对象引用可以造型成其任意超类型 (类或接口)的对象引用,这就是对象的多态 性 • 通过接口类型的对象引用只能访问接口中声 明的成员
Declaring Interfaces 声明接口的语法如下: 修饰符> nterface接口名> 接口成员声明 接囗名的命名规范与类相同接口也可以指 定所属的包
Declaring Interfaces • 声明接口的语法如下: interface { …接口成员声明… } • 接口名的命名规范与类相同,接口也可以指 定所属的包
Interface Modifiers 接口的修饰符可以有以下几种: (1)pb与类的 public修饰符相同 (2) abstract—通常被省略,因为接口中的 方法都是抽象的 (3)sp通常并不能限制接口中方法的 实现,一般不使用
Interface Modifiers • 接口的修饰符可以有以下几种: (1) public — 与类的public修饰符相同 (2) abstract — 通常被省略,因为接口中的 方法都是抽象的 (3) strictfp — 通常并不能限制接口中方法的 实现,一般不使用
Members of interface Interface Verbose int SiLEnt=0 int TERSE= 1: 命名常量 int NORMAL= 2 intⅤ ERBOSE=3: void set Verbose(int level);方法声明 f int get Verbosity; 化 现
Members of Interface • 接口中可以声明以下成员: (1) 域 (2) 方法 (3) 嵌套类和嵌套接口 • 接口中的成员都是public的,不能指定其它的访问 控制修饰符 • 接口中的域默认是static final的,必须显式初始化 • 接口中的方法只能提供方法头声明,不能提供实现, 且除abstract外,不能使用其它修饰符 Interface Verbose{ int SILENT = 0; int TERSE = 1; int NORMAL = 2; int VERBOSE = 3; void setVerbose(int level); int getVerbosity(); } 命名常量 方法声明
Extending Inter faces(接门的继承) 接口支持多亲继承,可以在关键字 extends后面跟 多个接口的列表,中间用豆号隔开,如 publi interface X& int val1 ble 子接[ d interface Y extends x int val2 子接!mtsm=a+xwat 域,被 隐藏自
Extending Interfaces (接口的继承) • 接口支持多亲继承,可以在关键字extends后面跟 多个接口的列表,中间用逗号隔开,如: public interface SerializableRunnable extends java.io.Serializable, Runnable { …… } • 子接口拥有所有父接口中声明的方法 • 子接口中的域将隐藏父接口中声明的同名域,被 隐藏的父接口中的域必须通过父接口名访问 interface X{ int val=1; } interface Y extends X{ int val=2; int sum=val+X.val; }
interface CardDealert void draw; void deal: void shuffled; interface GraphicalComponentt void draw; void draw (evice d); void rotate(int degrees) void fill( Color c); interface GraphicalCardDealer extends GraphicalComponent, CardDealert
接口中的方法覆盖和重载 • 接口中的方法可以重载(Overload),可以声 明方法名相同但签名不同的多个方法(包括 父接口中的方法) • 接口中的方法也可以覆盖(Override),但没 有实际的意义,因为接口中不提供方法的实 现 • 应注意接口的实现类对某个覆盖方法的实现 是否能满足不同接口对该方法的语义要求 interface CardDealer{ void draw(); void deal(); void shuffle(); } interface GraphicalComponent{ void draw(); void draw(Device d); void rotate(int degrees); void fill(Color c); } interface GraphicalCardDealer extends GraphicalComponent, CardDealer{ …… }
Implementing Interlaces 要定义接口的实现类,需在类头中使用关键 interface IA( class CA implements Bt void mao; public void mao{….} void mbo; public void mb0{….} public void mco{…} interface IB extends IAt void mb0: abstract CB implement Bi void mc0: public void ma({…} public void mc({..↓}
Implementing Interfaces • 要定义接口的实现类,需在类头中使用关键 字implements,基本语法如下: class implements • 类可以实现多个接口,接口列表中各个接口 名之间用逗号间隔 • 类必须提供接口中所有方法的实现,如果有 方法在类中没有实现,则类必须声明为抽象 类 interface IA{ void ma(); void mb(); } interface IB extends IA{ void mb(); void mc(); } class CA implements IB{ public void ma(){ … } public void mb(){ … } public void mc(){ … } } abstract CB implement IB{ public void ma(){ … } public void mc(){ … } }
Marker interfaces(标记接 不声明任何成员的接口称为标记接口 °标记接口是一种退化的类型,因为标记接口不声 明任何的成员,主要用于表示接口的实现类具有 某种一般的属性 Java语言的类库中提供了许多标记接口: javiblang, Cloneable ja,io Serializable java.io, externa lizable ava.rmi, Remote
Marker Interfaces (标记接口) • 不声明任何成员的接口称为标记接口 • 标记接口是一种退化的类型,因为标记接口不声 明任何的成员,主要用于表示接口的实现类具有 某种一般的属性 • Java语言的类库中提供了许多标记接口: java.lang.Cloneable java.io.Serializable java.io.Externalizable java.rmi.Remote