为什么Interface不能有受保护的方法

Lol*_*lly 26 java

可能重复:
在接口中受保护

在Java中为什么我不能在接口中使用受保护的方法?

因为根据Java规范

受保护的访问(由关键字protected表示) - 同一个包中任何类型可访问的字段或方法,以及任何包中的子类.

如果我必须使用该接口,我将实现它并覆盖方法.因此,如果我要实现类可以访问这些方法的位置,那么可以在任何包中访问该方法.那么在接口中将方法声明为受保护的危害是什么呢?

das*_*ght 13

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

  • 虽然我在这里理解你的观点,但是接口中的`public`方法是否强制实现类也与世界其他地方共享该方法?如果使用接口来使API的内部更加模块化,那么这并不意味着开发人员突然希望将其内部结构暴露给世界其他地方.有了这个限制,一个具有实现并且打算被"封装保护"(默认)的方法被强制变成"public",因为它遵守它的`interface`.因此虽然它对`protected`有意义,但它似乎不适用于`default` (39认同)
  • @dasblinkenlight,你说"接口无法提供,因为它们没有实现".**这是假的,**考虑抽象类,我们有公共抽象方法和受保护的抽象方法.受保护的抽象方法是有用的**因为实现者可以覆盖某些功能,同时保持该功能远离公共访问. (2认同)

Vin*_*Pii 6

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

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

人们不希望在定义时考虑实现 interface

  • 我想。因为Java不允许多重继承,所以必须在接口中使用默认方法和私有方法。 (2认同)