Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
2.4.16
-
None
-
None
Description
This is probably just a slice of GROOVY-1591, GROOVY-3010, GROOVY-3142, GROOVY-5438, et al. Adding super. qualifier causes strange behaviors. Please consider the following:
class Foo { private String field = 'field' private String method() { 'method' } } class Bar extends Foo { def baz() { field // MissingPropertyException: No such property: field for class: Bar method() // MissingMethodException: No signature of method: Bar.method() this.field // MissingPropertyException: No such property: field for class: Bar this.method() // MissingMethodException: No signature of method: Bar.method() // so far, so good -- although Groovy allows access to private fields and methods from outside of Bar and Foo super.field // MissingMethodException: No signature of method: Bar.getField() -- that's strange super.method() // returns "method" -- Why is this okay? super.@field // MissingMethodException: No signature of method: Bar.getField() -- that's strange super.&method // returns MethodClosure that throws NPE when called: (super.&method)() // NullPointerException: Cannot invoke method call() on null object-- If super.method() works, why doesn't this? } }
Attachments
Issue Links
- is cloned by
-
GROOVY-9851 Private field and method use from subclass is inconsistent
-
- Closed
-