相关疑难解决方法(0)

钻石问题

关于钻石问题的维基百科:

"......当两个B和C类继承自A,而D类继承自B和C时,钻石问题就会产生歧义.如果D中的方法调用A中定义的方法(并且不重写方法) ),B和C以不同的方式覆盖了该方法,然后从哪个类继承:B或C?"

所以钻石看起来像这样:

  A
 / \
B   C
 \ /
  D
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果没有这样的A类会发生什么,但B和C再次声明相同的方法,比如说foo().这不是同一个问题吗?为什么它被称为钻石问题?

例:

class B {
    public void foo() {...}
}

class C {
    public void foo() {...}
}

class D extends B, C {
}

new D().foo();
Run Code Online (Sandbox Code Playgroud)

oop inheritance diamond-problem

27
推荐指数
2
解决办法
1万
查看次数

标签 统计

diamond-problem ×1

inheritance ×1

oop ×1