- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我主要使用 PHP 和 Python。
我一直在阅读 OO 编程中的接口(interface),但看不到使用它的优势。
多个对象可以实现相同的接口(interface),但多重继承不也能做到这一点吗?
为什么我需要创建一个“没有实现”的接口(interface)——主要是一个“契约”——如果我只能检查一个方法是否存在于 Python 中的一个对象中,它继承自多个类?
接口(interface)是用其他语言创建的,因为它们不提供多重继承吗?还是我在这里遗漏了更重要的东西?
最佳答案
首先,也是最重要的,尽量不要在 Python 和 Java 之间进行比较和对比。它们是不同的语言,具有不同的语义。比较和对比只会导致像这样的令人困惑的问题,你试图将 Python 不使用的东西与 Java 需要的东西进行比较。
这很像比较数字 7 和绿色。都是名词。除此之外,您将无法比较两者。
这是底线。
Python 不需要接口(interface)。
Java 需要它们。
Multiple objects can implement the same interface, but multiple inheritance doesn't provide this as well?
这两个概念几乎没有任何关系。
我可以定义大量共享一个公共(public)接口(interface)的类。在 Python 中,由于“鸭子类型”,我不必仔细确保它们都有一个共同的父类(super class)。
接口(interface)是不相交类层次结构的“意图”声明。它提供了一个不属于简单类层次结构的通用规范(可以由编译器检查)。它允许多个类层次结构来实现一些通用功能,并针对这些功能实现多态。
在 Python 中,您可以通过我们的无接口(interface)使用多重继承。多重继承可以包含接口(interface)类,也可以不包含接口(interface)类。
Java 甚至没有多重继承。相反,它使用了一种完全不同的技术,称为“mixins”。
Why do I need to create an Interface "with no implementation" - mainly a "contract" - if I can just check if a method exists in an object in Python, that inherits from multiple classes?
如果您在 Python 中创建一个接口(interface),它可以是一种正式契约。声明所有子类都将绝对执行接口(interface)声明的操作。
当然,一个 NumPy 的人说谎是完全自由的。他们可以从接口(interface)继承并错误地实现所有内容。没有什么能阻止反社会者的不良行为。
您在 Java 中创建一个接口(interface)以允许多个类的对象具有共同的行为。由于您在 Python 中没有告诉编译器很多,所以这个概念甚至不适用。
Do Interfaces were created in another languages because they don't provide multiple inheritance?
由于概念不相关,所以很难回答这个问题。
在 Java 中,他们确实使用“mixin”而不是多重继承。 “接口(interface)”允许混合一些附加功能。这是接口(interface)的一种用途。
另一种使用接口(interface)来区分"is"和"is"的方法。类层次结构定义了对象是什么。接口(interface)层次结构定义了类的作用。
在大多数情况下,IS 和 DOES 是同构的,因此没有区别。
在某些情况下,对象是什么和对象做什么是不同的。
关于php - 接口(interface)只是 "Syntactic Sugar"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3134531/
为了说明我的观点,以下代码包含一个名为ColorValueChanger的方法,该方法使用this.passedIn作为可选参数。我以为这是为构造函数保留的? class Foo extends St
我正在查看 the docs并尝试了解运算符的实际工作方式。 The increment operator (++) increments its operand by 1. The incremen
我不知道这是否存在,但在我的项目中我有很多解析和验证。我以 5-10 多行 if(value) object.value = value 结尾。 我可以走 object.value = value |
C++14 泛型 lambda 是否为语言带来了真正的改进,还是它们是一种语法糖?是否有一些情况 [](auto param1, auto param2, /* ... */ auto paramN)
我正在遵循以下教程 https://learn.microsoft.com/en-us/azure/storage/common/storage-account-move?tabs=azure-por
我想在解析整个文件之前检查我的解释器是否使用 Python 3,否则会打印一条合适的错误消息。 在 this question ,有一个关于Python 2.4/2.5的答案。但是,当我尝试在 Pyt
编译器编译一个foreach循环成类似 for 的东西在 foreach 时循环与数组一起使用。编译器编译一个foreach循环成类似 while 的东西在 foreach 时循环与 IEnumera
我有以下电话 $.getJSON("/svrBooking/json/getEmployeesByManager",{ manager: "Paul Walker",
我的批处理文件程序总是在同一点崩溃。在它崩溃之前总是发生的是: ping -n 6 127.0.0.1 1>nul: 2>nul: -n cant be processed syntactically
我在尝试使用 Spring Boot 和 Thymeleaf 验证表单时遇到问题。只需使用给定字段注册用户即可。我使用的是多部分表单,因为该表单还上传图片,但我已经尝试在没有它的情况下使用该表单,但仍
@RequestMapping(value = "/invoice", method = RequestMethod.POST) public String submitInvoice(Htt
我目前正在学习 scp book 的练习 1.3。这是问题的描述: Define a procedure that takes three numbers as arguments and retur
在 Chrome 63.0 和 Firefox 58.0 中,向对象文字添加索引似乎可以防止对象被解析为对象。 {"a":"b"} 17:37:32.246 {a: "b"} {"a":"b"}["a
在其中一个操作中,我希望它发布内容。我发送以下值: permissionId = $('#permissionId').val(); var emails = $.
我正在开发一个使用 Spring 框架 3.1.0 版开发的 Web 应用程序。 我有一个 JSP 页面,其中包含一个允许用户从 SELECT 下拉列表框中选择国家/地区的表单。提交表单应该运行数据库
Google Java 风格指南中有一条规则“4.5.2 Indent continuation lines at least +4 spaces”,它说: In general, two conti
我试图理解为什么在将 block 作为参数时可以在类初始化中省略圆括号。 没有括号的例子: var block = CCActionCallBlock { () -> Void in NSLo
我主要使用 PHP 和 Python。 我一直在阅读 OO 编程中的接口(interface),但看不到使用它的优势。 多个对象可以实现相同的接口(interface),但多重继承不也能做到这一点吗?
我正在尝试访问可以使用 curl 对其进行测试的 Rest 资源 id 长度应为 11 个字符 如果 id 的长度小于 11 例如 '12345' https://somesite.com:7677/
像下面这样的表达式在 Idris 中是完全有效的: let x = Just 5 in let y = Just 6 in [|x / y|] 有人能写出如下表达式吗? let x = Just 5
我是一名优秀的程序员,十分优秀!