Groovy and Java static variable behaviour

Viewed 4761

I have been doing some Java and Grails3 programming recently. I found some behavior that I don't understand.

There are two groovy classes:

class Super {
    static String desc = "Super"
}

and

class Sub extends Super {
    static String desc = "Sub"
}

Now, I'm running following code in Java and Groovy:

Super aSuper = new Super();
Sub sub = new Sub();
Super superSub = new Sub();

System.out.println("Super object: [" + aSuper.getDesc() + "]"); //1
System.out.println("Sub object: [" + sub.getDesc() + "]");//2
System.out.println("Sub object, super reference: [" + superSub.getDesc()+ "]");//3
System.out.println("Super reference: [" + Super.getDesc()+ "]");//4
System.out.println("Sub reference: [" + Sub.getDesc()+ "]");//5

Results of 1,2,4,5 are the same in both cases and easy to predict ([Super], [Sub], [Super], [Sub])

But in case number 3 when running above code form Java class output will be: Sub object, super reference: [Super] And from Groovy it will result in: Sub object, super reference: [Sub]

Why is Groovy interpretation of static variable different?

1 Answers
Related