Измените свой код, который ожидает AbstractTableModel
, чтобы он принимал вместо него TableModel
(это интерфейс, реализованный AbstractTableModel
).Это должно быть сделано в любом случае.Никогда не полагайтесь на конкретную реализацию, когда вместо этого вы можете зависеть от интерфейса.
Тогда вы можете легко позволить классу AbstractModel
реализовать TableModel
.
Возможно, вам также следует подумать о создании интерфейса.для AbstractModel
.Обычно можно создать интерфейс X
, абстрактную базовую реализацию AbstractX
, которая обеспечивает общую функциональность, совместно используемую всеми реализациями, и реализациями MyX
, YourX
и т. Д. Только конкретные реализации (но не обязательно все) будутзнать и зависеть от AbstractX
, но нет кода вне этой иерархии.
Хороший пример этого - Java Collections Framework: например, List
, AbstractList
, ArrayList
и LinkedList
, но нет кода, который на самом деле зависит от AbstractList
.Большинство пользователей списка просто используют любой List
, или, если по какой-то причине им нужна конкретная реализация, они зависят от этого.