假设我们在Java中有这样的代码:
abstract class A {
private int x = 1;
public void smth(A a) {
a.x = 2;
}
public void print() {
System.out.println(x);
}
}
class B extends A {}
public class Main2 {
public static void main(String[] args) {
B b1 = new B(), b2 = new B();
b2.smth(b1);
b1.print();
b2.print();
}
}
此代码按预期编译并输出1 2
。
但是,当我们在Groovy中编译一段类似的代码时,会抛出groovy.lang.MissingPropertyException
:
class A {
private int x = 1;
void smth (A a) {
a.x = 2
}
void print() {println x}
}
class B extends A {}
B b1 = new B(), b2 = new B()
b2.smth(b1)
b1.print()
b2.print()
所以问题是:我们可以像在类似的Java代码中那样访问Groovy中另一个类的实例的私有字段吗?