几次,我遇到了以下观点
Java中的接口没有任何语义。只有具体的类才能定义方法的语义。
我总是认为这是一个非常奇怪的信念。对象或操作的/语义/是用户理解对象或操作所代表的内容。操作的/实现/主要是向机器发出的一系列指令 - 当然,机器不需要语义。
所以如果对象或操作的语义不在对象或方法的实现中,那么语义是在哪里定义的?
好吧,我认为语义在两个地方声明
- 事物的名称
- JavaDoc
这些是我们代码中找到/英语/单词的地方;因此,它们是为/人类/消费而设计的,而不是为机器消费而设计的。机器对名为A$_128__()的类a$aaBxw的方法与对Order类的submit()方法一样感到舒适。只有语义需要用英语表达。
当我们查看Java接口时,我们看到它包含的额外信息很少,除了名称列表和JavaDoc。所以,事实上,接口是Java源代码中找到的接近于纯
语义声明的最佳方式!如果接口没有语义
- 我们如何知道如何称呼它们?
- 我们在JavaDoc中会写什么?
当然,接口的实现可以添加额外的语义 - 事实上,抽象类型的任何子类型/必须/根据定义添加额外的语义。但这并不意味着类型层次结构中最抽象的类型/没有/语义。
好吧,也许除了Object之外。Object语义吗?当然,操作符具有语义,但类本身呢?让我们假设一下,Java的类型系统并不完全糟糕:没有原始类型,所以所有类型都扩展了Object。那么知道某物是Object有什么意义吗?我不确定。让我们把这当作一个评论区的练习吧;-)
但有一件事我确信:当我们声明我们的对象实现了一个接口时,我们确实对它是什么类型的事物说了些有意义的话。