接口实现访问修饰符不符合预期

时间:2014-03-24 13:59:48

标签: java access-modifiers

我遇到了一个界面实现的例子,我不知道如何处理,文本没有任何理由来答案,所以希望有人可以帮助。

给定界面

interface Flyer{
   void takeOff();
   boolean land();
}

然后假设我有一个如下实现

class Aeroplane implements Flyer{
   public void takeOff(){
   ...
   }
   //insert code here
       return true;
   }  
}

我要给的插入代码是 public boolean land(){并声明以下内容不正当boolean land(){

当接口将方法定义为public时,为什么我需要拥有package-private,当然boolean land(){应该实现接口,或者我错过了什么?

2 个答案:

答案 0 :(得分:4)

接口未将方法定义为包私有。接口声明的所有方法都是public。您对默认访问修饰符感到困惑。对于类而言,它确实是包私有的,但对于接口而言是public。所以,定义:

interface Flyer{
   void takeOff();
   void land();
}

绝对等同于

interface Flyer{
   public void takeOff();
   public void land();
}

答案 1 :(得分:3)

“接口已将方法定义为package-private”

接口中声明的所有方法都是公共的。没有办法解决这个问题。

interface Flyer{
   void takeOff();
   boolean land();
}

等同于此

interface Flyer{
   public void takeOff();
   public boolean land();
}

非法

interface Flyer{
   private void takeOff();
   private boolean land();
}

就是这样:

interface Flyer{
   protected void takeOff();
   protected boolean land();
}

两者都不会编译。