Java 接口真的可以用来实现多重继承吗
这种困惑我已经有很长时间了。很多人说,我们可以通过C++之类的语言实现接口的多重继承,而java语言却没有像C++那样支持它。但我对继承和接口的理解是否定的,因为接口是验证实现的契约,与行为无关。接口定义了什么东西可以做(而不是什么东西是)。但是继承是从父母那里继承行为和/或财产(就像孩子从父母那里得到一些遗传行为——这就是继承)。现在,孩子正在学习一种技能,比如绘画和烹饪,而界面(证书或合同)则作为孩子拥有这种技能的证明(这是孩子除了从父母那里得到的技能之外可以做的事情,而不是继承)Java 接口真的可以用来实现多重继承吗,java,c#,inheritance,interface,multiple-inheritance,Java,C#,Inheritance,Interface,Multiple Inheritance,这种困惑我已经有很长时间了。很多人说,我们可以通过C++之类的语言实现接口的多重继承,而java语言却没有像C++那样支持它。但我对继承和接口的理解是否定的,因为接口是验证实现的契约,与行为无关。接口定义了什么东西可以做(而不是什么东西是)。但是继承是从父母那里继承行为和/或财产(就像孩子从父母那里得到一些遗传行为——这就是继承)。现在,孩子正在学习一种技能,比如绘画和烹饪,而界面(证书或合同)则作为孩子拥有这种技能的证明(这是孩子除了从父母那里得到的技能之外可以做的事情,而不是继承) 那么我理
那么我理解错了吗?如果不是,那么为什么它说我们可以使用接口实现多重继承呢?接口为您提供了一种类型的多重继承,而不是行为。实现
列表
和映射
的类是一个“列表映射”,但该实现与任何现有的列表
或映射
实现无关(必须)
当然,使用组合(无论如何都应该受到欢迎),您可以轻松地创建一个ListMap
,它将调用相应地委托给它的list
和map
属性,同时提供一些可能有用的函数来组合它们各自的数据
Java 8允许使用默认方法进行接口,因此行为继承现在也成为可能。在Java中,您可以创建一个接口,例如
动物
和一个抽象类鸟
然后您可以拥有一个类MockingBird
,它扩展了Bird
的行为并实现了动物的动作
但是,您可以将模仿鸟称为动物
或鸟
,因为它“继承”。不,接口不能用于实现多重继承
在Java中完全不是,在C中,我们可以更接近
当我想实现一个观察器时,我研究了这个问题,结果出现在Robert Martin的博客中:
读了这篇文章后,我意识到他说的是Java,但C#支持扩展方法,允许在接口上附加行为,所以我尝试在一些IObservable接口上实现,但显然失败了,即使我可以在这些接口扩展方法中附加行为,但我仍然不允许在它们上附加状态,如果有一天microsoft决定实施,那么这种组合(接口+扩展方法+扩展属性)就足以真正模拟一些有用的多重继承
目前,我们一直在复制代码,或者在我们的所有观察者中复制授权代码,如博客中所述。查看此链接。这可能会有帮助