Из-за созданной цепочки классов C экземпляры будут иметь все 3 доступных метода:
- A.ex (Object)
- B.ex (B)
- C .ex (A)
Все они могут быть использованы для вашего xx.ex(xx)
вызова. На этом этапе, согласно Java spe c, вызывается наиболее конкретный метод c.
Если более одного метода-члена доступны и применимы к вызову метода, необходимо выбрать один, чтобы предоставить дескриптор для отправки метода во время выполнения. В языке программирования Java используется правило, согласно которому выбирается наиболее конкретный метод c.
Поскольку у вас нет метода ex(C)
, наиболее конкретный метод c, который соответствует Ваш вызов B.ex(B)
, так как B является подклассом A, который является подклассом Object.