1. A reference variable can be of only one type and once declared, that type can never be changed(although the object it references can change)
Example: Means I have a Class
Test
Test t1;
Once I declared t1 as type of Test. Its type is never going to change.
2. A reference is a varaible ,so it can be reassigned to other objects(unless the reference is declared final)
Example: Above we have created a reference - Test t1;
t1 can store its own class and subclass object as well, even we can reassign the same reference to different class. Below is the example
Like - Class ChileTest extends Test and another class - Class AnotherTest extends Test
t1 = new ChildTest();
t1 = new AnotherTest();
If we will use final then reassigning is not possible.
3. A reference variable's type determines the methods that can be invoked on the object the variable is referencing.
Example: AnotherTest class has one method doCalculation();
You can call doCalculation() method using super class variable.
4. A reference variable can refer to any object of the same type as the declared reference , or - it can refer to any subtype of the declared type.
Example: Its answer is same as for point no. 2 except final
5. A reference variable can be declared as a class type or an interface type. If the variable is declared as an interface type, it can reference any object of any class that implements the interface.
Example - we have a interface: Interface BaseInterface { }
Class Test implements BaseInterface {}
Then we can create the reference of BaseInterface.
BaseInterface baseInterface = new Test();
Please let me know if you are not clear.