Экземпляры класса A
никогда не будут также экземплярами X
. Однако в первом примере возможно, что a1
является экземпляром некоторого гипотетического класса, который расширяет A
и реализует X
, поэтому приведение в порядке.
Во втором примере нет подклассов A
, потому что он окончательный. Поскольку A
не реализует X
, никогда не будет экземпляра A
, который также является экземпляром X
. Таким образом, компилятор достаточно умен, чтобы понимать, что приведение типов всегда завершается ошибкой, и поэтому выдает сообщение об ошибке.