Java 中的继承:命名冲突案例

Inheritance in Java: naming collision case

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

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

根据您的描述,您在 Drawer class 和 java.awt.Canvas class 之间实现了 关系扩展它。

看来您确实想要 关系。

要解决这个问题,不要扩展 java.awt.Canvas,而是保留一个本地 Canvas 实例变量并在您的 Drawer class.

中使用它

我会使用来自所选祖先的完全限定名称来完成。

而不是只调用

methodName

你试试这样的:

java.package.subpackage.class.method

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