我们为什么要将接口方法声明为public?

Vis*_*hnu 32 java interface public-method

当我实现一个interface方法时,我不得不把它变成一个public方法.

我们可能会default遇到我们想要使用的情况(如同在相同包中访问的情况)或protected.

有人可以解释这个限制背后的原因吗?

Pét*_*rök 54

接口用于定义类型的公共 API - 而不仅仅是它的实现.因此,您在接口中定义的任何方法(或静态成员)都是定义的public.

由于接口不能包含任何具体实现,因此无法从内部调用任何成员方法.并且声明这样的方法但是将它们调用到子类或完全不相关的客户端将意味着你的类型定义是不完整和脆弱的.这就是为什么如果您需要定义受保护或包访问成员,您可以在抽象类(也可能包含实现)中这样做.

  • 我认为这个答案是对的,但它基本上是一种迂回的说法,"因为这就是Java人们想要的." 你也可以提出完全合理的论据来获得受保护的方法(package-private可能有点难以证明).但你肯定不能拥有私有方法,因为那些方法永远不会被继承.我的猜测是,不是说"这个可见性的子集,而这就是为什么这个 - 但不是那个",他们认为只是说"这是你得到的一个可见性"就更简单了. (10认同)

npi*_*nti 10

也许会提供一些答案.

据我所知,您可以使用interfaces代码外部的人员与代码进行交互.为此,您需要定义方法public.

如果您想强制某人覆盖一组给定的私有方法,您可能希望使用一系列抽象受保护方法声明一个抽象类.

  • "抽象私人方法"......你的意思是"抽象保护方法"吗? (4认同)
  • 但是,Joshua Bloch强烈建议我们将接口用作-types-并使用这些类型来引用对象.这是一个不错的主意,但它开发了两种概念化接口的方法:作为一种机制,以不干扰单一继承的方式使用用户定义的类型; 并作为API合同.由于我们有这两个,我同意如果我们不必公开接口方法以保持那些我们不想导出封装的UDT,那将是非常好的. (2认同)