当我浏览GitHub时,大多数项目都以这种方式在界面中定义方法:
interface ExampleInterface
{
function getId();
}
现在我的问题是为什么在界面中定义方法可见性是不好的风格:
interface ExampleInterface
{
public function getId();
}
它使接口更严格,但不是那个接口用于什么?
答案 0 :(得分:11)
界面中私有函数的意义是什么?声明public
是多余的。
:
All methods declared in an interface must be public, this is the nature of an interface.
答案 1 :(得分:4)
这是因为接口是您向外界提供某些功能的承诺。在上面的示例中,每当类实现一个接口时,它都保证该类将向外界提供一个名为getId
的方法,而不管它是如何实现的。
因此,如果您创建私有promise
,则无关紧要,因为没有人关心是否存在具有某些功能的私有方法,否则任何其他人都无法访问它。
另一方面,界面中的所有方法基本上都是公开的(因为它们只是对外界的承诺),因此你明确地提到它是public
是多余的。
答案 2 :(得分:2)
接口只能包含公共方法,因此公共有点多余。
答案 3 :(得分:2)
界面只能包含公开成员,因此无需声明。这些功能意味着继承。因此; 界面中声明的所有方法都必须是公共的,这就是它的性质 ..
答案 4 :(得分:0)
我可以理解私人不能工作但也受到保护吗?
我理解这是"承诺"对于外部世界但是如果某些东西实现了一个接口,那么该方法将保持受到保护,因此同样的#34;承诺"仍然保持着。它声明有函数a,函数b和受保护的函数c,因此我们得出如果我没有扩展/实现它,那么我就无法访问函数c。因为在阅读课程时它的工作原理相同。
@AlphaMale那么接口有什么意义呢?它用于创建一个"配方"对于一堂课吧?因此,当您在代码中实际使用它时,它只会实现并强制使用方法。如果您的代码需要使用方法并且您不想强制它到特定的类,这会变得很方便。
让我们说我有一个创建邮件程序,但我必须在需要邮件的主要流程,但邮件程序将使用不同的方式来构建这些邮件。现在需要一个基本发送功能,它接收一个消息(任何类型)和一个电子邮件地址,但由于这些类处于开放环境中,所以将这个发送功能保持公开是危险的,因此我们需要它作为受保护的方法。现在在两个进程中有多个邮件程序,但每个进程共享相同的构造方法的方式,因此有2个抽象类但现在由于有限的接口,你现在必须声明第三个抽象类来包含这个受保护的发送函数,以便它也可以扩展,否则你将拥有相同的受保护发送功能。如果新开发人员在一个全新的进程上工作并查看该接口,则永远不会强制发送函数。如果我们说可以在界面中声明受保护,那么如果你检查某些东西是否是一个接口,它将与一个类一样工作,你仍然无法访问受保护的函数。
Private是有道理的,因为只有接口才会知道这些值,因为接口无法做任何事情,这将毫无意义。