【寻求kotlin大神请进,已经折腾得没办法了,跪谢】

我有一个如下kotlin类:

open class  E {

  @JvmField var name:String = "kotlin eee"

}

一个java类,继承 E

public class SubE extends E{

    public String name = “sub eee”
}

现在在kotlin 中有如下代码:

var subE = SubE()
println(subE.name) // 这行代码包如下错误

Overload resolution ambiguity. All these functions match.
public final var name: String! defined in com.java.invokefromkotlin.callkotlin.SubE
@JvmField public final var name: String defined in com.java.invokefromkotlin.callkotlin.SubE

但是如果java中调用就没有任何问题:

    SubE subE = new SubE();
    System.out.println(subE.name) // ok 没有任何问题

如果把kotlin E 换成是一个java类E,然后由SubE 继承:

public  class  E {

  public String name = "java eee"

}

那么不管是在java中还是在kotlin中 访问SubE的 name 都ok

实在想不通为什么会这样。求大神们解惑

kotlin刚出没多久,你就用上了啊,

两个类有同样命名和类型的变量,自然冲突,你换个命名

因为上面kotlin里面的name,已经被你给赋值了,所以在他里面已经被认为是一个常量了,所以不能再次背赋值,而你二次在你的子类里面又进行了赋值,所以报错。

kotlin中的属性和java中的字段不是一个意思,区分清楚了就明白为什么了