Я думаю, что вы видите здесь, является результатом ввода / вывода стоимости.
Если вы передаете значение типа actial Integer
in, оно преобразуется в int
во время поиска метода и вызывается 1-й метод.
Если вы приводите значение к Number
или его подкласс явно, входящие сообщения не происходят, и вызывается метод, ожидающий Number
.
Я немного расширил ваш код:
def method(int i) {
println "int > $i / ${i.getClass()}"
}
def method(Number i) {
println "Number > $i / ${i.getClass()}"
}
def method(float i) {
println "float > $i / ${i.getClass()}"
}
Number n = 1
Number nFloat = 1.0f
Number nDouble = 1.0d
method n
method( new BigInteger( n ) )
method( (Number)n )
method( new BigInteger( n ) as int )
method nFloat
method nDouble
отпечатки
int > 1 / class java.lang.Integer
Number > 1 / class java.math.BigInteger
Number > 1 / class java.lang.Integer
int > 1 / class java.lang.Integer
float > 1.0 / class java.lang.Float
Number > 1.0 / class java.lang.Double
Надеюсь, теперь все становится яснее ...