您的位置:首页 > 其它

> > 6.6.2接口的定义

2014-12-10 22:53 148 查看
> > 6.6.2接口的定义
和类定义不同,定义接口不再使用class关键字,而是使用interface关键字。接口定义的基本语法如下:

[修饰符]interface接口名 extends父接口1,父接口2......
{
零个到多个常量定义
零个到多个抽象方法定义...
}

上面语法的详细说明如下:
》修饰符可以是public或者省略,如果省略了public访问控制符,则默认采用包权限访问控制符,即只有在相同包结构下才可以访问该接口。
》接口名应与类名采用相同的命名规则,即如果仅从语法角度来看,接口名只要是合法的标识符即可;如果要遵守Java可读性规范,则接口名应由多个有意义的单词连缀而言,每个单词首字母大写,单词与单词之间无需任何分隔符。
》一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类

由于接口定义的是一种规范,因此接口里不能包含构造器和初始化块定义。接口里可以包含属性(只能是常量)、方法(只能是抽象实例方法)、内部类(包括内部接口)和枚举类定义。
对比接口和类的定义方式,不难发现接口的成员比类里的成员少了2种,而且接口里的属性只能是常量,接口里的方法只能是抽象方法。
前面已经说过了,接口里定义的是多个类共同的公共行为规范,因此接口里所有成员,包括常量、方法、内部类和枚举类都是public访问权限。定义接口成员时,可以省略访问控制修饰符,如果指定访问控制修饰符,只能使用public访问控制修饰符。
对于接口里定义的常量属性而言,它们是接口相关的,而且它们只能是常量,因此系统会自动为这些属性增加static和final两个修饰符。也就是说,在接口中定义属性时,不管是否使用public static final修饰符,接口里的属性总将使用这三个修饰符来修饰。而且,接口里没有构造器和初始化块,因此接口里定义的属性只能在定义时指定默认值。
接口里定义属性采用如下两行代码的结果完全一样:

//系统自动为接口里定义的属性增加public static final 修饰符
int MAXee SIZE = 50;
public static final int MAX_SIZE = 50;

对于接口里定义的方法而言,它们只能抽象方法,因此系统自动会为其增加abstract修饰符;由于接口里的方法全部是抽象方法,因此接口里不允许定义静态方法,即不可使用static修饰接口里定义方法。不管定义接口里方法时是否使用public abstract修饰符,接口里的方法总是使用public
abstract来修饰。

$注意
接口里定义的内部类和枚举类,它们默认都采用public static两个修饰符,不管定义时是否指定这两个修饰符,系统自动使用public static对它们进行修饰.

下面定义一个接口:
程序清单:codes/06/6-6/Output.java

public interface Output {
//接口里定义的属性只能是常量
int MAX_CACHE_LINE = 50;
//接口里定义的只能是public的抽象实例方法
void out();
void getDate(String msg);
}

上面定义了一个Output接口,这个接口里包含了一个常量属性:MAX CACHEes LINE。除此之外,这个接口还定义了2个方法:表示取得输出数据的 getData()和表示输出的outO方法.这就定义了Output的接口的规范:只要某个类它能取得输出数据,并可以将数据输出,那它就是一个输出设备,至于这个设备的实现细节,这里暂时不关心。
接口里的属性默认是使用public static final修饰的,因此即使另一个类处于不同包下,也可以通过接口来访问接口里的常量属性。例如下面程序:

程序清单:codes/06/6-6/TestOutputProperty.java

package yeeku;
public class TestOutputProperty {
public static void main(String[] args){
//访问另一个包中的Output接口的MAX_CACHE_LINE属性

System.out.println(lee.Output.MAX_CACHE_LINE);

//下面语句将引起"为final变量赋值"的编译异常:
lee.OutPut.MAX_CACHE_LINE = 20;

}
}

从上面main方法中可以看出,TestOutputProperty与Output处于不同包下,但可以访问Output的MAX CACHE LINE属性,这表明该属性是public访问权限的,而且可通过接口来访问该属性,表明这个属性是一个静态属性;当为这个属性赋值时引发的”为final变量赋值”的编译异常,表明这个属性使用了final修饰。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐