Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接口真的可以用来实现多重继承吗_Java_C#_Inheritance_Interface_Multiple Inheritance - Fatal编程技术网

Java 接口真的可以用来实现多重继承吗

Java 接口真的可以用来实现多重继承吗,java,c#,inheritance,interface,multiple-inheritance,Java,C#,Inheritance,Interface,Multiple Inheritance,这种困惑我已经有很长时间了。很多人说,我们可以通过C++之类的语言实现接口的多重继承,而java语言却没有像C++那样支持它。但我对继承和接口的理解是否定的,因为接口是验证实现的契约,与行为无关。接口定义了什么东西可以做(而不是什么东西是)。但是继承是从父母那里继承行为和/或财产(就像孩子从父母那里得到一些遗传行为——这就是继承)。现在,孩子正在学习一种技能,比如绘画和烹饪,而界面(证书或合同)则作为孩子拥有这种技能的证明(这是孩子除了从父母那里得到的技能之外可以做的事情,而不是继承) 那么我理

这种困惑我已经有很长时间了。很多人说,我们可以通过C++之类的语言实现接口的多重继承,而java语言却没有像C++那样支持它。但我对继承和接口的理解是否定的,因为接口是验证实现的契约,与行为无关。接口定义了什么东西可以做(而不是什么东西是)。但是继承是从父母那里继承行为和/或财产(就像孩子从父母那里得到一些遗传行为——这就是继承)。现在,孩子正在学习一种技能,比如绘画和烹饪,而界面(证书或合同)则作为孩子拥有这种技能的证明(这是孩子除了从父母那里得到的技能之外可以做的事情,而不是继承)


那么我理解错了吗?如果不是,那么为什么它说我们可以使用接口实现多重继承呢?

接口为您提供了一种类型的多重继承,而不是行为。实现
列表
映射
的类是一个“列表映射”,但该实现与任何现有的
列表
映射
实现无关(必须)

当然,使用组合(无论如何都应该受到欢迎),您可以轻松地创建一个
ListMap
,它将调用相应地委托给它的
list
map
属性,同时提供一些可能有用的函数来组合它们各自的数据


Java 8允许使用默认方法进行接口,因此行为继承现在也成为可能。

在Java中,您可以创建一个接口,例如
动物
和一个抽象类

然后您可以拥有一个类
MockingBird
,它扩展了
Bird
的行为并实现了
动物的动作


但是,您可以将
模仿鸟
称为
动物
,因为它“继承”

不,接口不能用于实现多重继承

在Java中完全不是,在C中,我们可以更接近

当我想实现一个观察器时,我研究了这个问题,结果出现在Robert Martin的博客中:

读了这篇文章后,我意识到他说的是Java,但C#支持扩展方法,允许在接口上附加行为,所以我尝试在一些IObservable接口上实现,但显然失败了,即使我可以在这些接口扩展方法中附加行为,但我仍然不允许在它们上附加状态,如果有一天microsoft决定实施,那么这种组合(接口+扩展方法+扩展属性)就足以真正模拟一些有用的多重继承

目前,我们一直在复制代码,或者在我们的所有观察者中复制授权代码,如博客中所述。

查看此链接。这可能会有帮助