首页 > 试题广场 >

在使用 interface 声明一个接口时,只可以使用()修

[单选题]

在使用 interface 声明一个接口时,只可以使用()修饰符修饰该接口

  • private
  • protected
  • 默认
  • public
这是一个看似简单其实挺有深意的题目,答案应该大多数人都知道是什么,不过原理和原因相比很少有人仔细研究过。对于本题,我有三点说明,希望看到这个评论的人能从这三点中看到你以前没注意到的东西:
①接口的声明,修饰符的使用和类的声明是一致的,(当前,前提类是外部类,不是所谓的内部类),都只能使用public或者什么都不写,默认权限(这里的默认权限不是default,可以理解为friendly,但是java没有这个关键字,但权限上可以理解为default),无论是private还是protected都是不可以的。
②关于修饰符大小的说明:public>protected>默认>private,用一张表就是如下:


③综合①②,问题出现了,为什么protected的权限比默认权限要高,但是却不能使用它修饰类或者接口呢?原因何在?本题评论如此之少,也没有人深入揭示问题所在,都只是说什么由于需要被其他包其他类实现,所以就是public,那么对于默认修饰符的存在你们怎么解释?我简单说明一下:首先,这里对于接口声明的默认修饰符,可不是像接口中的方法那样,不写修饰符就默认是public了,接口的声明不写修饰符就是default权限,只能同包的类可以访问,其他包是不行的,不信试试看。其次虽然protected权限要比默认权限高,但是对于类或者接口的声明却不能使用,可以简单这么理解:一个外部类或者接口,它的上一层结构是包,因此他们只有两个作用域:同包,任意位置。除此之外的权限没有任何意义,而基于此,public和默认权限就是足够的了,不需要使用protected这种多余的权限造成更为复杂的类关系,因此java限制了类或接口的声明,就仅限于public和默认。
这些才是这个题的意义所在,更不是前面几个提到的什么由于需要被实现就是public了,根本没说说到点子上,甚至存在误导嫌疑。
发表于 2018-04-11 20:10:08 回复(6)
接口就是为了让其他类继承的,肯定是公共的。
发表于 2017-09-12 10:04:00 回复(0)

接口的声明格式如下:

[public] interface InterfaceName [extends listofSuperInterface] {..}

一个接口可以有多个父类接口,声明时用“,”隔开;

此外,关于修饰符public是可选的,省略时则为默认的访问权限(此时只有同此接口在同一个包中的类才可以访问这个接口)。

所以根据题意,应该是选择权限修饰符public。

发表于 2017-02-07 16:18:54 回复(0)
接口就是为了让其他类继承的,肯定是public
发表于 2023-03-01 11:07:51 回复(0)
题目是有问题的,默认是可以的
发表于 2024-11-20 23:04:08 回复(0)
声明一个接口,让类去实现,那么此类可能是本类的,本包的,外包的
也有可能这个接口是可以扩展一个子接口,子类的修饰符等级小于等于父级的,所以用public最为合适,默认修饰符次之
发表于 2018-07-02 09:29:53 回复(0)
public 修饰接口 其方法也必须是public
发表于 2017-10-14 19:56:37 回复(0)
D
接口必须被继承,所以得是public
发表于 2016-12-13 14:24:36 回复(2)