第九章 接口
- 可以在 interface关键字前面添加public关键字(但仅限于该接口在与其同名的文件中被定义)。如果不添加public关键字,则它只具有包访问权限,这样它就只能在同一个包内可用,接口也可以包含域,但是这些域隐式地是static和final的。
- 可以选择在接口中显式地将方法声明为public的,但即使你不这么做,他们也是public的。因此,当要实现一个接口时,在接口中被定义的方法必须被定义为是public的;否则,他们将只能得到默认的包访问权限,这样在方法被集成的过程中,其可访问权限就被降低了,这是Java编译器所不允许的。
-
interface CanFight { void fight(); } interface CanSwim { void swim(); } interface CanFly { void fly(); } class ActionCharacter { public void fight() {} } class Hero extends ActionCharacter implements CanFight, CanSwim, CanFly { public void swim() {} public void fly() {} }
CanFight接口与ActionCharater类中的fight()方法的特征签名是一样的,而且,在Hero中并没有提供fight()的定义。可以拓展接口,但是得到的只是另一个接口。当想要创建对象时,所有的地冠以首先必须都存在。即使Hero没有显式地提供fight()的定义,其定义也因ActionCharacter而随之而来,这样就使得创建Hero对象称为了可能。
- 一般情况下,只可以将extends用于单一类,但是在创建新接口时,extends可以引用多个基类接口。