Как реализовать множественное наследование в Java с интерфейсами? - PullRequest
1 голос
/ 28 ноября 2011

Мне нужно имитировать множественное наследование в Java.Это может быть неправильный дизайн, но, поскольку моя проблема не в функциональности (родительского) класса, я не смог имитировать эту функцию с помощью интерфейсов.Вот более подробное описание проблемы.У меня есть класс с именем AbstractModel.java с количеством методов.С другой стороны, есть еще один класс AbstractTableModel.java.Теперь предположим, что существует класс с именем table controller.java, который имеет дело с AbstractModel.java, а с другой стороны, есть класс с именем Tableview .java, который имеет дело с AbstractTableModel.java.Мне нужно каким-то образом определить: открытый класс A расширяет AbstractModel, AbstracTableModel, чтобы и представление, и контроллер могли использовать один и тот же класс с расширением.Обратите внимание, что решение AbstractTableModel.java extends AbstractModel не является решением, поскольку оно является встроенным классом Java.

Спасибо.

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

Вы не можете сделать это напрямую в Java, но вы можете использовать шаблон проектирования делегирования .Смотрите здесь .Это очень похожий вопрос по SO.

0 голосов
/ 28 ноября 2011

Измените свой код, который ожидает AbstractTableModel, чтобы он принимал вместо него TableModel (это интерфейс, реализованный AbstractTableModel).Это должно быть сделано в любом случае.Никогда не полагайтесь на конкретную реализацию, когда вместо этого вы можете зависеть от интерфейса.

Тогда вы можете легко позволить классу AbstractModel реализовать TableModel.

Возможно, вам также следует подумать о создании интерфейса.для AbstractModel.Обычно можно создать интерфейс X, абстрактную базовую реализацию AbstractX, которая обеспечивает общую функциональность, совместно используемую всеми реализациями, и реализациями MyX, YourX и т. Д. Только конкретные реализации (но не обязательно все) будутзнать и зависеть от AbstractX, но нет кода вне этой иерархии.

Хороший пример этого - Java Collections Framework: например, List, AbstractList, ArrayList и LinkedList, но нет кода, который на самом деле зависит от AbstractList.Большинство пользователей списка просто используют любой List, или, если по какой-то причине им нужна конкретная реализация, они зависят от этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...