Search code examples
inheritanceparameter-passingoverridingobject-referencereference-parameters

Method Overriding with reference passed as argument


This question is based on the concept that when I store the reference of child class into parents class variable.And, using that variable I call the method that is present in both the classes Child-Parent.Here child method should get evoked and it does but that not happens when I pass the reference as the parameters, why?

class Parent 
{
public void show()
    {
    System.out.println("Parent");
    }
}

class Child extends Parent
{
    public void show()
    {
    System.out.println("Child");
    }
}

public class Call {
    public static void main(String args[])
    {
    Parent p=new Child();
    p.show();
    }
}

Output Expected: "Child" Actual Output: "Child" [as expected]

But,

class Parent 
{
public void show(Parent x)
    {
    System.out.println("Parent");
    }
}    
class Child extends Parent
{
public void show(Child x)
    {
    System.out.println("Child");
    }
}

public class Call {
public static void main(String args[])
    {
    Parent p=new Child();
    p.show(new Child());
    }
}

Why the output is "Parent" in this case?


Solution

  • This is because in second example child is not actully overriding the show method. So when you call p.show(new Child()) it actually calls method of parent class not child.

    Hope it's clear.