> > 6.6.2接口的定义

> > 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修饰。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值