Класс, который реализует интерфейс в банке, но не переопределяет методы

1

Мой проект имеет зависимость от apache commons-dbcp, и мы используем версию 1.2.2

Используемая нами версия commons-dbcp имеет класс org.apache.commons.dbcp.BasicDataSource который реализует javax.sql.DataSource который, в свою очередь, реализует java.sql.Wrapper, однако BasicDataSource не реализует методы, определенные в Wrapper (jdk 1.6.Икс). Но мой проект с классом (MyClass), который расширяет BasicDataSource без проблем, я немного озадачен. В IntelliJ я вижу MyClass как ошибку.

Теги:
apache-commons-dbcp

1 ответ

1
Лучший ответ

Этот класс был скомпилирован с более ранней версией интерфейса javax.sql.DataSource (версия Java 5 или более ранняя версия). Интерфейс Wrapper был представлен с помощью Java 6/JDBC 4.0.

Когда загрузчик классов загружает класс, который реализует интерфейс, но не реализует все новые методы, он позволяет это. Когда метод фактически вызывается, NoSuchMethodError (я считаю, что он заглушает недостающие методы, чтобы выбросить это исключение). Это позволяет обеспечить совместимость с ограниченным доступом: пока этот метод на самом деле не называется, реализация будет работать.

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

  • 0
    +1 тыс. для хорошего объяснения, а также

Ещё вопросы

Сообщество Overcoder
Наверх
Меню