Вы не можете переопределить static
методы - они статически связаны с классом, в котором они определены. Таким образом, в отличие от методов экземпляра, они вообще не полиморфны.
Фактически, b.multiply(5,2)
должно приводить к предупреждению компилятора о том, что вызовы метода static
должны ограничиваться классом, а не экземпляром, поэтому правильная форма будет B.multiply(5,2)
(или A.multiply(5,2)
). Затем выясняется, какой метод на самом деле вызывается.
Если вы пропустите предупреждение компилятора, вы легко запутаетесь: -)