Tag: 多重inheritance

为什么我不能扩展接口“generics方法”并将其类型缩小到我inheritance的接口“class generic”?

我展示了一个我的意思的例子,哪个更容易。 想象一下,generics类型C表示颜色类型:因此,为了直观简化,假设C是C扩展颜色 interface Screen { Background render(Plane plane); } interface MonochromeScreen extends Screen{ @Override Background render(Plane plane); } 这将引发名称冲突编译错误,说明两者都具有相同类型的擦除但不可覆盖。 但我无法理解为什么我们不能简单地允许覆盖签名,只要它更具限制性。 我的意思是,毕竟,唯一的区别是generics类型的范围,在Screen中是方法范围的,而MonochromeScreen是在类范围内。 允许子方法在其父级在类级别强制执行时允许子方法作为方法范围的generics覆盖是没有意义的,但我认为它不这样做:我的父接口可以有20个方法与不相关的generics类型,但我的子类将强制它们全部与非不兼容的额外规格/合同相同(这是任何扩展接口所做的),毕竟,单色屏幕仍然是一个屏幕,因为它可以涂上任何颜色,我只是强制执行该颜色,无论哪个颜色,都与孩子的其他function保持一致,只是缩小了课堂级别的可能性,而不是方法级别。 考虑这个function有没有根本错误的假设? 编辑:我接受了Sotirios Delimanolis的回答,因为他非常聪明地发现了正确的麻烦而且我没有要求解决方案,但是对于那些想要知道如何克服这种情况的人来说,有一个技巧在我自己的答案中解释

在java中实现接口方法是否覆盖

我知道这可能很疯狂,但今天我的一位朋友在询问我们在java中实现接口时感到困惑的是它被视为方法覆盖。 我告诉他,当我们实现任何接口时,第一次提供方法的工作(定义)时,它不会重写。 为了支持多重inheritance,java提供了接口,但他并不相信并且在争论。 请介绍一下这个话题。

Java 8默认方法inheritance

假设有以下类型: public interface Base { default void sayHi(){ System.out.println(“hi from base”); } } public interface Foo extends Base { @Override default void sayHi(){ System.out.println(“hi from foo”); } } public interface Bar extends Base { } public class MyClass implements Foo, Bar { public static void main(String[] args) { MyClass c = new MyClass(); c.sayHi(); } […]

Java中的多重inheritance与否?

据说,Java语言只支持单inheritance。 但是,如何同时从Object和任何其他类inheritance? 这不是一个多重inheritance。 其次,我们需要inheritance所有11个Object方法? 我很难想象为什么我在I / O中需要它们,例如 最后,JDK 8将在接口中为我们提供默认方法实现,如果这可能会导致Java中的多重inheritance。 如果接口A为方法a()提供了默认实现,接口B也提供了另一个默认实现的a()方法,我们的自定义类C实现了两个接口并依赖于默认实现 – 那不是Diamond of Death吗?

如何从多个类扩展状态

(请注意:交易卡游戏Magic:The Gathering的知识将在这里加分。抱歉,我不知道如何更容易。) 我遇到了一个使用Java的问题,我将描述如下……我有一个名为Card的基本类,它具有以下所有属性: public class Card{ String Name; String RulesText; String FlavorText; String Cost; int ConvertedCost; String Rarity; int Number; } 永久类扩展卡,并由生物,飞行者,神器,土地和结界等类扩展。 到目前为止,只有前两个有自己的领域: public class Creature extends Permanent{ int Power; int Toughness; } public class Planeswalker extends Permanent{ int Loyalty; } 问题: 某些永久对象可能受影响其子类对象的方法的影响,例如,作为工件和生物,或作为工件和土地。 我知道我可以使用接口来扩展行为,但除非我使用抽象类,否则我不能这样做以扩展状态,在某些情况下我需要一个具有Artifacts和Creatures状态的对象。 指定子类的大多数永久对象不会受到针对不同子类的对象的方法的影响 。 (即,仅针对Enchantment对象的方法不能影响Creature对象。)

Java中的多重inheritance如何工作?

Class Object是类层次结构的根。 每个类都有Object作为超类。 那么,如果我正在扩展API类,它会是多重inheritance吗? 显然,Java不支持多重inheritance。 它是如何工作的?

如果一个类派生自另一个派生自Object的类,那就是“多重inheritance”

关于Java的事实是它不支持多重inheritance。 但我有一个问题,即所有java类的基类都是Object。 现在我们有两个类:A类和B类.Binheritance自A然后B的Base类将是Object和A,所以这里发生了多重inheritance。 有人会帮我清除疑虑吗?

界面是否解决了“致命的死亡钻石”问题?

界面是否解决了死亡问题的致命钻石 ? 我不这么认为,例如: // A class implementing two interfaces Interface1 and Interface2. // Interface1 has int x=10 and Interface2 has int x = 20 public class MultipleInterface implements Interface1, Interface2{ public void getX(){ System.out.println(x); } } 在这里我们得到一个模棱两可的x 。 虽然接口是解决方法模糊性的好方法,但我猜它们在变量的情况下会失败? 我对么? 如果我遗失了什么,请赐教。

如何在Java中实现多重inheritance

我正在使用Java中的某个API库。 它有一个基类A,以及B和C,它们都扩展A. B&C提供类似但不同的function,所有三个类都在库中。 public abstract class A { virtual foo(); } public class B extends A {} public class C extends A {} 如何在课堂上获得A , B和C元素? 如果我使用接口来实现类,则会有很多重复的代码,内部类将不允许我覆盖现有的方法,以便保留A , B和C的调用接口。 如何在Java中实现多重inheritance? 编辑:感谢编辑George,现在更清楚了,忘了提一个关键要求:我的类必须以A为基础,以便它们可以通过平台API进行管理。

Java接口上的多重inheritance

我认为多重inheritance在Java中总是非法的,但是这段代码编译: public interface A { void a(); } public interface B { void b(); } public interface AB extends A, B { } 像AB这样的空接口会被视为不良做法吗? 有没有办法在避免空接口(使用generics或其他方式)的同时实现类似的东西? 注意:我不是在问如何通过接口模拟多重inheritance。 我意识到我可以做到以下几点: public class AbImpl implements A, B { public void a() {} public void b() {} } 由于各种原因,我需要一个具有两种方法的接口。