我正在阅读“Java教程”(第二次)。我刚刚完成了关于接口(interface)的部分(再次),但仍然不明白Java接口(interface)如何模拟多重继承。有比书上更清楚的解释吗? 最佳答案 假设您的域中有两种东西:卡车和厨房卡车有一个driveTo()方法,而厨房有一个cook()方法。现在假设Pauli决定在送货卡车的后部销售比萨饼。他想要一个可以driveTo()和cook()的东西。在C++中,他会使用多重继承来做到这一点。在被认为太危险的Java中,您可以从主类继承,但您可以从接口(interface)“继承”行为,这
我正在阅读“Java教程”(第二次)。我刚刚完成了关于接口(interface)的部分(再次),但仍然不明白Java接口(interface)如何模拟多重继承。有比书上更清楚的解释吗? 最佳答案 假设您的域中有两种东西:卡车和厨房卡车有一个driveTo()方法,而厨房有一个cook()方法。现在假设Pauli决定在送货卡车的后部销售比萨饼。他想要一个可以driveTo()和cook()的东西。在C++中,他会使用多重继承来做到这一点。在被认为太危险的Java中,您可以从主类继承,但您可以从接口(interface)“继承”行为,这
我知道在Java和C#中不允许多重继承。很多书只是说,不允许多重继承。但它可以通过使用接口(interface)来实现。没有讨论为什么不允许这样做。谁能准确告诉我为什么不允许这样做? 最佳答案 简短的回答是:因为语言设计者决定不这样做。基本上,.NET和Java设计者似乎都不允许多重继承,因为他们认为添加MI增加了语言的复杂性,而提供的好处太少强>。为了获得更有趣和更深入的阅读,网络上提供了一些文章,其中包含对一些语言设计者的采访。例如,对于.NET,ChrisBrumme(曾在MS从事CLR工作)解释了他们决定不这样做的原因:Di
我知道在Java和C#中不允许多重继承。很多书只是说,不允许多重继承。但它可以通过使用接口(interface)来实现。没有讨论为什么不允许这样做。谁能准确告诉我为什么不允许这样做? 最佳答案 简短的回答是:因为语言设计者决定不这样做。基本上,.NET和Java设计者似乎都不允许多重继承,因为他们认为添加MI增加了语言的复杂性,而提供的好处太少强>。为了获得更有趣和更深入的阅读,网络上提供了一些文章,其中包含对一些语言设计者的采访。例如,对于.NET,ChrisBrumme(曾在MS从事CLR工作)解释了他们决定不这样做的原因:Di
Java不允许多重继承,但它允许实现多个接口(interface)。为什么? 最佳答案 因为接口(interface)只指定什么类在做什么,而不是如何它是做什么的。多重继承的问题是两个类可能会定义不同的方式来做同样的事情,而子类不能选择选择哪一个。 关于java-为什么Java中没有多重继承,却允许实现多个接口(interface)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions
Java不允许多重继承,但它允许实现多个接口(interface)。为什么? 最佳答案 因为接口(interface)只指定什么类在做什么,而不是如何它是做什么的。多重继承的问题是两个类可能会定义不同的方式来做同样的事情,而子类不能选择选择哪一个。 关于java-为什么Java中没有多重继承,却允许实现多个接口(interface)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions
我正在寻找一种好的、干净的方法来解决PHP5仍然不支持多重继承这一事实。这是类层次结构:留言--短信--------InvitationTextMessage--电子邮件消息--------InvitationEmailMessage这两种Invitation*类有很多共同点;我很想有一个共同的父类,邀请,他们都会继承。不幸的是,它们与当前的祖先也有很多共同点……TextMessage和EmailMessage。这里是多重继承的经典愿望。解决问题的最轻量级方法是什么?谢谢! 最佳答案 Alex,大多数情况下,您需要多重继承表明您的对
我正在寻找一种好的、干净的方法来解决PHP5仍然不支持多重继承这一事实。这是类层次结构:留言--短信--------InvitationTextMessage--电子邮件消息--------InvitationEmailMessage这两种Invitation*类有很多共同点;我很想有一个共同的父类,邀请,他们都会继承。不幸的是,它们与当前的祖先也有很多共同点……TextMessage和EmailMessage。这里是多重继承的经典愿望。解决问题的最轻量级方法是什么?谢谢! 最佳答案 Alex,大多数情况下,您需要多重继承表明您的对
背景最近有一个需求需要自定义一个多继承abc.ABC与django.contrib.admin.ModelAdmin两个父类的抽象子类,方便不同模块复用大部分代码,同时强制必须实现所有抽象方法,没想按想当然的写法实现多继承时,居然报错metaclassconflict:In[1]:importabcIn[2]:fromdjango.contribimportadminIn[3]:classMyAdmin(abc.ABC,admin.ModelAdmin):...:pass...:----------------------------------------------------------
背景最近有一个需求需要自定义一个多继承abc.ABC与django.contrib.admin.ModelAdmin两个父类的抽象子类,方便不同模块复用大部分代码,同时强制必须实现所有抽象方法,没想按想当然的写法实现多继承时,居然报错metaclassconflict:In[1]:importabcIn[2]:fromdjango.contribimportadminIn[3]:classMyAdmin(abc.ABC,admin.ModelAdmin):...:pass...:----------------------------------------------------------