书上说,即使不写public,接口中的方法也是public的,那么为什么不允许把接口中的方法声明为protected或者默认呢?
假设接口中的方法允许被声明为默认,那么只有这个接口所在包内的,并且实现该接口的类,可以调用这个方法,
假设接口中的方法允许被声明为protected,那么只有这个接口所在包内的,并且实现该接口的类,以及这些类的子类可以调用这个接口中的方法
这两个假设从理论上也是说的通的啊,为什么实际不是这种情况呢?

解决方案 »

  1.   

    这可能是SUN内部的规定。呵呵
      

  2.   

    请问如果接口是protect和private的,怎么使用它的多态,何况接口都是为了代码可以扩展用的,为什么还要缩小它的作用范围?(其实因为前面那个原因,后面那句根本就是废话)
      

  3.   

    接口都是对外开放的呀,当然要public,楼主是想要接口只供某个包使用?那直接用抽象类吧
      

  4.   

    接口就意味 对外公开, over
      

  5.   

    接口就一定是public的,Sun就是这么规定的,也没必要一定说它怎样合理,将就用吧。就象楼上有这么说的:
    接口都是对外开放的呀,当然要public你也这样理解:
    接口是public的,所以只能对外公开。
      

  6.   

    LZ需要好好看看关于接口这一块了,接口定义后是要去让其它类实现了,这才弥补了单继承的问题,如果是默认的话(private)或是protected的帽接口则会变得毫无意义,其实这些东西书上都做了很明确的阐述,只是LZ不用心而已
      

  7.   

    默认不是private,是default,有些书说是friendly
      

  8.   

      接口没规定是public的啊,也可以是缺省的package
       但在项目中一般是public的,这跟编程开闭原则有关,编程到接口。
     
      

  9.   

    楼上的,接口不管有没有写public,都是public的,就算没有访问控制符(某些书上所谓的default,package或者friendly),也还是public
      

  10.   

     对,
     接口是一套公共的规范。
     所以要public。
     楼主很注意思考~~
      

  11.   

    观察了2天回帖,最后总结大家的意见:可用于接口本身的修饰符:
    public或者默认(default,package,friendly)
    abstract(不管有没有写,其实都是abstarct,一般不写)可用于接口中方法的访问修饰符:
    public(不管有没有写,其实都是public,一般都写)
    abstract(不管有没有写,其实都是abstarct,一般不写)
      

  12.   

    接口,就是定位了一堆规范,让别人去实现的。
    所以他是public 的·
    楼上的总结的很好,以后也要好好回帖总结·
      

  13.   

    接口本来就是要去别的类去实现的
    你把方法弄成private  别的类不都哭了?
      

  14.   

    好问题!
    接口--只能够implements,不能extend
    声明为protect,只有子类能访问。而同时,没有子类能够继承(extend)这个接口,矛盾。
      

  15.   

    看了这半天,最后22楼给的回答最有说服力,众所周知接口内成员肯定不能为private,而为什么接口内成员不能为protected,22楼给了很好的回答!implements实现接口并不是继承,只有继承的子类才能访问protected类型成员,所以接口不能声明protected类型成员。