Наследование в Java: случай конфликта имен - PullRequest
0 голосов
/ 01 июня 2018

Этот вопрос касается не только Java, но и других объектно-ориентированных языков.Я проектировал простую библиотеку пользовательского интерфейса, и у нее есть специальный интерфейс Drawer, который содержит абстрактные методы для рисования элементов управления и примитивов на некоторой графической поверхности, где мы можем устанавливать пиксели.Он предназначен для сборки поверх какой-то простой графической платформы.И сейчас я использую движок рисования AWT.Дело в том, что я создал класс AWTDrawer, который расширяет java.awt.Canvas и реализует Drawer, и здесь происходит конфликт имен: у обоих предков есть методы SetColor, getColor, drawLine.Как я могу определить, какой метод предка я хочу использовать?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Я бы сделал это, используя Полные Квалифицированные Имена от выбранного предка.

Вместо вызова просто

methodName

Вы пытаетесь что-то сделатькак:

java.package.subpackage.class.method

Другие языки, такие как C #, та же идея, но они называют это Пространства имен

0 голосов
/ 01 июня 2018

Обычно это ошибка в вашем проекте.

Из вашего описания вы реализовали - это отношение между вашим Drawer классом и java.awt.Canvas классом путем его расширения.

Вероятно, вы действительно хотите, чтобы имел отношение .

Чтобы решить эту проблему, вместо расширения java.awt.Canvas, удерживайте локальную переменную Canvas экземпляра ииспользуйте его в своем Drawer классе.

...