Groovy中的特性改变了类类型的兼容性?

Groovy中的特性改变了类类型的兼容性?,groovy,Groovy,我的测试代码如下: trait Behavior { } class Dog { def greet() { println 'Hi, I am a dog.' } } def foo(Dog dog) { dog.greet() } def dog = new Dog() as Behavior dog.greet() foo(dog) 它给出如下错误: Hi, I am a dog. Caught: groovy.lang.MissingMet

我的测试代码如下:

trait Behavior {
}

class Dog {
    def greet() {
        println 'Hi, I am a dog.'
    }
}

def foo(Dog dog) {
    dog.greet()
}

def dog = new Dog() as Behavior
dog.greet()
foo(dog)
它给出如下错误:

Hi, I am a dog.
Caught: groovy.lang.MissingMethodException: No signature of method: test2.foo() is applicable for argument types: (Dog1_groovyProxy) values: [Dog1_groovyProxy@48f278eb]
Possible solutions: foo(Dog), run(), run(), any(), find(), use([Ljava.lang.Object;)
groovy.lang.MissingMethodException: No signature of method: test2.foo() is applicable for argument types: (Dog1_groovyProxy) values: [Dog1_groovyProxy@48f278eb]
Possible solutions: foo(Dog), run(), run(), any(), find(), use([Ljava.lang.Object;)
    at test2.run(test2.groovy:18)
为什么这种特质会改变“狗”的阶级类型?当它实现特性“行为”时,它不会是类Dog的实例吗?调用“foo”方法会产生错误


Trait更改类类型兼容性,与“implement”不同?

此处将实例类型更改为
行为,如中所述

将对象强制为特征时,操作的结果不是同一实例。可以保证强制对象将实现原始对象实现的trait和接口,但结果将不是原始类的实例