当我浏览 GitHub 时,大多数项目都以这种方式在接口中定义方法:
interface ExampleInterface
{
function getId();
}
我现在的问题是为什么在接口中定义方法可见性是不好的风格:
interface ExampleInterface
{
public function getId();
}
它使接口更加严格,但这不是接口的用途吗?
当我浏览 GitHub 时,大多数项目都以这种方式在接口中定义方法:
interface ExampleInterface
{
function getId();
}
我现在的问题是为什么在接口中定义方法可见性是不好的风格:
interface ExampleInterface
{
public function getId();
}
它使接口更加严格,但这不是接口的用途吗?
接口中的私有函数有什么意义?声明public
是多余的。
来自 TFM:
All methods declared in an interface must be public, this is the nature of an interface.
这是因为接口是您对外部世界的某些功能的承诺。在上面的示例中,每当一个类实现一个接口时,它保证该类将提供一个调用getId
外部世界的方法,而不管它是如何实现的。
因此,如果您创建一个 private promise
,它是无关紧要的,因为没有人关心是否有一个具有某些功能的私有方法,无论如何其他人都无法访问它。
另一方面,接口中的所有方法本质上都是公共的(因为它们只不过是对外界的承诺),因此您明确提及它public
是多余的。
接口只能包含公共方法,所以公共有点多余。
一个接口只能有公共成员,所以不需要声明它。而这些功能是要被继承的。所以; 接口中声明的所有方法都必须是公共的,这就是它的本质..
我可以理解私人不能工作但也受到保护?
我知道这是对外界的“承诺”,但如果某物实现了一个接口,该方法将保持受保护,因此仍然保持相同的“承诺”。它声明有函数 a、函数 b 以及受保护的函数 c,因此如果我不扩展/实现它,我们就可以从中派生出,那么我将无法访问函数 c。因为当你阅读课程时它的工作原理是一样的。
@AlphaMale 好的,那么界面的意义何在?它是用来为班级创建“食谱”的吗?因此,当您在代码中实际使用它时,它只会实现和强制方法。如果您的代码需要方法才能工作并且您不想将其强制用于特定类,这将变得很方便。
假设我要创建邮件程序,但我必须处理需要邮件的主要流程,但邮件程序将使用不同的方式来构建这些邮件。现在需要一个接收消息(任何类型)和电子邮件地址的基本发送函数,但由于这些类处于开放环境中,因此将此发送函数公开是很危险的,因此我们需要将其作为受保护的方法。现在在两个进程中有多个邮件程序,但每个进程共享相同的方法构造方法,所以有 2 个抽象类,但现在由于接口有限,您现在必须声明第三个抽象类来包含这个受保护的发送函数,以便它也可以扩展,否则您将拥有相同的受保护发送功能。如果一个新开发人员在一个全新的进程上工作并查看界面,那么发送函数将永远不会被强制执行。如果我们说可以在接口中声明受保护,那么在外部如果您检查某物是否是接口,它将与类一样工作,您仍然无法访问受保护的函数。
Private makes sense because then only the interface will know about these values and since an interface can't do anything this will be pointless.