求问Java大神几个小问题:1:为什么在一个Java类文件中,不能为interface指定修饰符?而在类文件中的一个类中的内部interface却可以指定修饰符?2:为什么在一个实现了interface中的方法的类中的这个方法必须是public ?如果不申明为public IDE会提示说实现的这个方法指定了更低的访问权限,但如果是一个内部类实现的一个内部private interface中的方法,不申明的访问权限为什么也是降低了?

解决方案 »

  1.   

    interface其实就是一种特殊的抽象类,里面只能包含未实现的方法和常量,方法默认为public,也只能是public,常量默认为public final static,也只能是public final static
      

  2.   

    其实楼主讲得有点清楚。说实话,这些都是基础问题,进一步研究一下java中的interface及inner class就会知道这些问题的答案,自己搞清楚的比别人说的感觉更好一些。祝你成功。
      

  3.   

    interface的访问修饰符和class一样,如果在类内部,就可以是public、默认、protected、private;如果定义在全局,就只能是public和默认(不加修饰符),想一想private和protected的含义就可以理解。interface中的函数的默认的访问修饰符就是public。Java中有一条规则就是派生类中 覆写了基类函数的函数 的访问权限应该比基类中它覆写的那个函数高,也就是说,Base b = new Derived();
    b.f();    // 1
    Derived d = (Derived) b;
    d.f();    // 2在Java中只要1能够执行,那么2就一定能执行,这保证了一个对象作为派生类身份时不会丧失一些能力。(“鸟”能飞但是“丑小鸭”却不能飞了……)
      

  4.   

    +1 
    很对
    所以在实现的过程中,子类方法不能比父类方法设定更小的访问权限
    所以实现类必须写上public 接口中为什么不写 因为是默认的
      

  5.   

    楼上几位说的都挺对的,我说一说我的理解,interface的目的就是让其它的类或者接口来实现,如果你写成private的方法,那这个方法对于实现的类或者接口来说根本就没有什么用!
      

  6.   

    接口及其方法都必须是public,实现接口的类中,如果不声明实现方法为public,则默认是protected.比接口中的方法访问权限低,这是不允许的,所以会报错。如果想添加较低访问权限的方法,可以给实现接口的那个类定义所需的private的方法。
      

  7.   

    interface 是修饰类的。
    interface里的方法是抽象的。只能是public修饰子类才能实现它。
    java里的规则。无它