Java中的继承:命名碰撞案例

时间:2018-06-01 13:28:04

标签: java oop inheritance multiple-inheritance library-design

这个问题不仅涉及Java,还涉及另一种面向对象的语言。我设计了一个简单的UI库,它有一个名为Drawer的特殊接口,它包含抽象方法,用于在我们可以设置像素的某个图形表面上绘制控件和基元。它旨在建立在一些简单的图形平台的顶部。而就目前而言,我使用的是AWT绘图引擎。 问题是我创建了类AWTDrawer,它扩展了java.awt.Canvas并实现了Drawer,这是一个命名冲突:两个祖先都有SetColorgetColor,{{1 }} 方法。我怎样才能确定我想要使用的祖先方法?

2 个答案:

答案 0 :(得分:3)

这通常是您设计中的错误。

根据您的说明,您已通过扩展Drawer课程与java.awt.Canvas课程之间的关系。

您似乎确实希望具有关系。

要解决此问题,请保留本地java.awt.Canvas实例变量,而不是扩展Canvas,并在Drawer类中使用它。

答案 1 :(得分:1)

我会通过使用所选祖先的完全合格名称来实现。

而不是仅仅打电话

  

方法名

您尝试类似:

  

java.package.subpackage.class.method

其他语言,如C#,同样的想法,但他们称之为命名空间