gpt4 book ai didi

class - 为什么要在句法层面区分接口(interface)和抽象类?

转载 作者:行者123 更新时间:2023-12-01 08:22:17 26 4
gpt4 key购买 nike

(免责声明:这不是关于理解抽象类接口(interface)之间区别的问题。如果你没有得到那,请再读一遍标题。我很清楚契约和半实现子系统之间的区别。)

让我们以 Java 为例。似乎几乎不需要一个独特的关键字interface,从我作为开发人员的角度来看,编译器吐出完全相同的东西,用人类的话说就是,“你不能利用直到您派生(通过 implementsextends)一个实现其方法的新类”。简单。

但是有一种情况可能会阻止将这两者混淆:当我们需要实现多个接口(interface)时,因为Java不允许多重继承(对于es)。当然,以这样一种方式构建语言是微不足道的,编译器可以识别何时有任何方法体或声明的变量,并随后禁止 multi-implements/extends where合适的?那么优先顺序会不会出现问题?

这是我们具有这种句法差异的唯一原因吗?

附言我问这个问题的一个原因是,这种情况可能会给新的 OO 程序员带来相当大的理解挑战,我认为在语言级别以更流线型的方式处理这个问题,将极大地有助于更快地掌握概念上的差异。

最佳答案

Surely it would be trivial to build the language in such a way that the compiler recognises when there are any method bodies or declared variables, and subsequently disallows multi-implements/extends where appropriate?

假设您确实这样做了。所以你的语言允许你这样做:

class Foo extends A, B, C {
}

只要 BC 中的每个方法都是抽象的,它就不会提示。很好,花花公子。

现在假设您没有创建B。它在其他人写的其他包中。他们对你的类Foo一无所知。当他们制作 B 时,其中的所有内容都是抽象的,但这只是一个巧合:他们碰巧还没有任何具体的内容可以放入其中。

后来,他们决定向 B 添加另一个方法, 是具体的。现在,他们在不知不觉中破坏了您的 Foo 类。

拥有显式 interface 构造的一个论点是,它使 B 的作者的意图对使用它的人来说很清楚。

总的来说,我认为你的问题很好。我使用的语言 Dart 实际上与您所说的很接近:它现在有一个显式的 interface 语法,但它正在被删除以支持纯抽象类。

关于class - 为什么要在句法层面区分接口(interface)和抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11593455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com