【问题标题】:Interface implementation access modifier not as expected接口实现访问修饰符不符合预期
【发布时间】:2024-09-29 14:20:02
【问题描述】:

我遇到了这个接口实现的例子,我无法理解,文本没有任何理由来回答,所以希望这里的人可以伸出援助之手。

给定界面

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

那么假设我有一个如下的实现

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

给我的插入代码是 public boolean land(){ 并指出以下内容不正确 boolean land(){

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

【问题讨论】:

  • Void 不是布尔值。此外,接口是隐式公共的,这就是接口的意义所在。
  • 对不起,这是我的错误...已编辑..
  • "接口已将方法定义为包私有"。接口中声明的方法根据定义是公共的。没办法。
  • 啊……现在说得通了,鬼鬼祟祟……

标签: java access-modifiers


【解决方案1】:

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

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

绝对等价于

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

【讨论】:

  • 感谢您的帮助!
【解决方案2】:

“接口已将方法定义为包私有”

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

这个

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();
}

两者都不会编译。

【讨论】:

  • 感谢您的帮助!
  • 是的,没关系。这就是为什么我删除了我的评论,希望你不会看到它。您的修改更清楚了。