接口和抽象类定义规则

来源:互联网 发布:python 开发聊天工具 编辑:程序博客网 时间:2024/04/28 22:02

接口

interface关键字用来声明一个接口,它可以产生一个完全抽象的类,并且不提供任何具体实现。一旦定义完,任何类都可以实现接口,另外,类可以实现任意数目的接口。

一个类要实现一个接口,必须创建由接口定义的完整方法集,但每个类可以自主决定它的实现细节。

已声明的方法没有方法体,它们在参数列表后用一个分号";"结束。接口本质上是抽象的方法,在接口内指定的任何方法都没有默认实现,而每个包含接口的类必须实现所有的方法。

可以在接口声明内声明变量,它们被隐含地声明为final和static,这意味着它们不能由实现类来改变,同时还必须用一个常量值来初始化它。
要实现一个接口,可以在一个类定义中包含implements子句,然后创建接口定义的方法。

若一个类实现了多个接口(相当于多重继承),则用逗号分开;若一个类实现了两个接口,而这两个接口声明了同一个方法,那么这个方法将被其中一个接口的客户使用;实现接口的方法必须声明为public,实现方法的类型声明必须与在interface定义中所指定的类型声明完全匹配。

在一个实现接口的类中,可以定义它们自己的成员方法。

变量可以声明为使用接口的对象引用而不是类的类型,任何实现了所声明接口的类的实例都可以被这样一个变量所引用。

如果一个类包含一个接口,但没有完全实现该接口所定义的方法,那么这个类必须被声明为abstract。

通过一个接口引用变量访问一个接口的多个实现是Java实现运行时多态性的最强大功能。

使用接口可以把共享常量导入到多个类中,方法是声明一个包含变量的接口,当一个类实现该接口时,所有的变量名在其作用域内将作为常量。

利用关键词extends,一个接口可以继承另一个接口,其语法与继承类时的语法相同。当一个类实现了一个接口,而该接口继承自另一个接口时,它必须提供在接口继承链内所定义的所有方法的实现。

在Java语法结构中,接口可以被嵌套,既可以被某个类嵌套,也可以被接口嵌套。这在实际开发中可能应用的不多,但也是它的特性之一。需要注意的是,在实现某个接口时,并不需要实现嵌套在其内部的任何接口,而且,private接口不能在定义它的类之外被实现。

抽象类

抽象类是一个超类,声明了一个给定结构的抽象内容,但不提供每个方法的完整实现。

要声明一个类是抽象类,只需在类声明的开始处class关键词前使用abstract关键词。包括一个或多个抽象方法的类也必须被声明为抽象的。

抽象类不能通过new运算符直接实例化,不能声明抽象构造函数或抽象静态方法,所有的抽象类的子类都必须实现超类中的所有抽象方法,如果没有完全实现,则必须声明为abstract。

interface和abstract class的比较及选择参照:

1. interface和abstract class都不能实例化,但可以声明引用变量,abstract class中子类必须对父类的抽象方法进行重写

2. 如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。

3. 如果知道某个类应该是基类,那么第一个选择的应该是让它成为一个接口,只有在必须要有方法定义和成员变量的时候,才应该选择抽象类。因为抽象类中允许存在一个或多个被具体实现的方法,只要方法没有被全部实现该类就仍是抽象类。

原创粉丝点击