【问题标题】:Concrete class implementing interface with lower access访问权限较低的具体类实现接口
【发布时间】:2018-10-05 06:39:07
【问题描述】:

为什么java make interface 只允许公共抽象方法?

为什么接口方法总是公开的,不允许受保护。抽象类中哪里可以实现受保护的抽象方法。

抽象类可以使访问权限较低的抽象方法对吗?接口是定义抽象列表的抽象数据类型。

有人可以向我解释一下为什么要这样实现吗?

public abstract class Animal{
    protected abstract void printName(); 

}

---假设为单独的文件---

public class Lion extends Animal{

    protected void printName(){}

}

【问题讨论】:

  • 对于您的第一个问题,接口是类可能具有的行为的契约。他们说什么一个类可以做,但现在如何它会做。因此,所有方法接口都是抽象的。实际上,Java 8 中发生了这种变化,但总的来说我说的是真的。
  • @deHaar 问题相对不同
  • public 因为接口旨在向外界公开行为。 abstract 因为不应该公开实现。
  • @TimBiegeleisen 您的意思是接口是类必须具有的行为契约?实现类应该实现接口的所有方法吧?我认为接口是从抽象类相对派生的,但现在它根本没有实现,纯粹是抽象的。但抽象类可以允许受保护的抽象方法。

标签: java


【解决方案1】:

这回答了最终出现在您的评论中的问题:

为什么接口方法总是公开的,不允许受保护。在抽象类中哪里可以实现受保护的抽象方法,甚至更低

除了public 之外,在接口中创建abstract 方法是没有意义的,因为这样实现类就不可能看到它。实际上,在 Java 9 中,private 接口方法之类的东西。但是,private 接口方法不能也是abstract,因为这两个修饰符的含义不同。 Java 9 接口中的私有方法旨在在接口内使用,例如通过default 方法。所以在这种情况下有一个private 接口方法是有意义的,因为它只打算在内部使用。

Here is a link 到一篇关于此主题的有用博客文章。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2014-10-26
    • 1970-01-01
    • 2017-10-08
    • 2011-12-23
    • 2013-09-30
    相关资源
    最近更新 更多