Java 为什么接口不能有受保护的方法

Java 为什么接口不能有受保护的方法,java,Java,可能重复: 在Java中,为什么在接口中不能有受保护的方法 因为根据Java规范 受保护的访问(用关键字protected表示)——同一包中的任何类型以及任何包中的子类都可以访问的字段或方法 如果我必须使用接口,我将实现它并重写这些方法。 所以如果我要实现类在哪里可以访问这些方法,因为方法可以在任何包中访问。那么,在接口中将方法声明为受保护有什么害处呢?受保护的方法旨在与子类共享实现。接口在实现共享方面没有什么可以提供的,因为它们根本没有实现。因此,接口上的所有方法都必须是公共的。对象的接口是

可能重复:

在Java中,为什么在接口中不能有受保护的方法

因为根据Java规范

受保护的访问(用关键字protected表示)——同一包中的任何类型以及任何包中的子类都可以访问的字段或方法

如果我必须使用接口,我将实现它并重写这些方法。
所以如果我要实现类在哪里可以访问这些方法,因为方法可以在任何包中访问。那么,在接口中将方法声明为受保护有什么害处呢?

受保护的方法旨在与子类共享实现。接口在实现共享方面没有什么可以提供的,因为它们根本没有实现。因此,接口上的所有方法都必须是公共的。

对象的接口是该类的外部用户可见的对象的一部分。 相反,受保护和私有方法(和字段)属于类内部。它们被封装在类中,类用户不应该知道它们

因此,由于
interface
用于定义接口(没有双关语),因此它们不包含受保护的方法是合理的


在定义
接口时,我们不想考虑实现问题,这是一个非常好的问题。对于Java中的几乎所有其他东西,我都找到了做出选择的真正原因,但对于这一点,我还没有找到。在一个接口中定义一个受保护的方法对我来说非常有意义,该接口允许同一个包中的另一个类在实现对象上使用该方法,而无需向世界其他地方公开该方法,该方法可能不会被包成员以外的任何人调用。@MarkusA.,+1,也请看,尽管我理解您在这里的观点,但是接口中的
public
方法是否会迫使实现类也与世界其他地方共享该方法?如果一个接口被用来使API的内部更加模块化,这并不意味着开发人员突然想要向世界其他地方公开其内部。有了这个限制,一个有一个实现并且打算被
包保护的方法(默认值)将被迫成为
公共的
,因为它符合
接口
。因此,尽管这对于受保护的
来说是有意义的,但对于
默认值
@jbx来说,这似乎并不正确-包私有接口确实会产生一个有趣的问题。但是,我认为可以通过允许包私有方法提供包私有接口的实现,在编译器级别解决这个问题。实际上我认为接口本身可以是包私有的,所以实际上这个限制所做的是强制执行全有或全无方法。不能让一半的方法
public
和一半的方法受包保护。您可以看到
接口及其所有方法,也可以看不到。也许这就是全能的创造者们最终的意图:)。无论如何,它确实会造成上述问题。实现受包保护的
接口的
public
类将被迫使用实现接口的方法
public
@dasblinkenlight,您声明“接口没有任何功能,因为它们没有实现”。这是错误的,考虑抽象类,我们有公开的抽象方法和受保护的抽象方法。受保护的抽象方法很有用,因为实现者可以重写某些功能,同时使该功能远离公共访问。@Pacerier我专门谈到Java接口,而不是抽象类。当然,抽象类允许您继承实现。因为Java不允许多重继承,所以您必须在接口中使用默认方法和私有方法。