Java Field Hiding

field, instance-variables, java, member-hiding, static-variables

Solution

`static` members are never overridden (and certainly not by non-static members). And since you should access them like this: `ClassName.member` there is also no need to worry about hiding them.

In your case, you would access the `Superclass` field like this: `Superclass.field`. And the field of a `Subclass` instance like this: `subclass.field`. If you have, however a `Subclass` instance in a `Superclass` variable like above, this code: `d.field` will access the static field defined in `Superclass`, which will be `false` in your case.

But this does not change the value of the `Subclass` instance, it just accesses the "wrong" member! You can verify this by putting the instance in `d` back into a `Subclass` variable and reading `field` again.

Problem

I was wondering what it means to say a field is hidden between 2 java classes and what it means when running code in terms of resulting output? I have an abstract class with a `protected static boolean field = false` and a sub class which has a boolean field with the same name but is not static and set to `true`. If I had this code: ``` Superclass d = new subclass(); ``` what would be the value of the boolean field in the superclass and the boolean field in the subclass? Does subclass field stay as `false` after the assignment above?

Original source

Related problems