I am just refreshing the oops features of the java. So, I have a little confusion regarding inheritance concept. For that I have a following sample code :
class Super{
int index = 5;
public void printVal(){
System.out.println("Super");
}
}
class Sub extends Super{
int index = 2;
public void printVal(){
System.out.println("Sub");
}
}
public class Runner {
public static void main(String args[]){
Super sup = new Sub();
System.out.println(sup.index+",");
sup.printVal();
}
}
Now above code is giving me output as : 5,Sub.
Here, we are overriding printVal() method, so that is understandable that it is accessing child class method only.
But I could not understand why it’s accessing the value of x from Super class…
Thanks in advance….
Objects have types, and variables have types. Because you put:
Now you have a variable
supof typeSuperwhich refers to an object of typeSub.When you call a method on an object, the method that runs is chosen based on the type of the object, which is why it prints “Sub” instead of “Super”.
When you access a field in an object, the field is chosen based on the type of the variable, which is why you get 5.