Overriding member variables in Java ( Variable Hiding)

java, overriding

Solution

When you make a variable of the same name in a subclass, that's called hiding. The resulting subclass will now have both properties. You can access the one from the superclass with `super.var` or `((SuperClass)this).var`. The variables don't even have to be of the same type; they are just two variables sharing a name, much like two overloaded methods.

Problem

I am studying overriding member functions in Java and thought about experimenting with overriding member variables. So, I defined classes ``` public class A{ public int intVal = 1; public void identifyClass() { System.out.println("I am class A"); } } public class B extends A { public int intVal = 2; public void identifyClass() { System.out.println("I am class B"); } } public class mainClass { public static void main(String [] args) { A a = new A(); B b = new B(); A aRef; aRef = a; System.out.println(aRef.intVal); aRef.identifyClass(); aRef = b; System.out.println(aRef.intVal); aRef.identifyClass(); } } ``` The output is: ``` 1 I am class A 1 I am class B ``` I am not able to understand why when aRef is set to b intVal is still of class A?

Original source

Related problems