Tuesday, 29 July 2014

Difference between Method Overriding and Method Hiding



Difference between Method Overriding and Method Hiding

Method Overriding :

public class BaseClass
{
   public virtual void print()
   {
    console.WriteLine("Base Class Print Method");
   }
}
Public class DerivedClass : BaseClass
{
 public Override void print()
 {
  console.WriteLine("Derived Class Print Method");
 }

}

Public Class program
{
 public static void Main()
 {
  BaseClass b=new DerivedClass();
  b.print();
 }

}

output: Derived Class Print Method

Note: In method overriding  a base class reference variable pointing to the child class object,
will invoke overridden method in the child class.

Method Hiding:

public class BaseClass
{
   public void print()
   {
    console.WriteLine("Base Class Print Method");
   }
}
Public class DerivedClass : BaseClass
{
 public new void print()
 {
  console.WriteLine("Derived Class Print Method");
 }

}

Public Class program
{
 public static void Main()
 {
  BaseClass b=new DerivedClass();
  b.print();
 }

}

output: Base Class Print Method

Note:
In method hiding a base class reference variable pointing to the child class object,
will invoke the hidden method in the Base class.

-- To Hide the base class members from derived class using new keyword

how to invoke hidden base class member from derived class?

there are three ways to invoke hidden base class member from derived class

1.using base keyword

public class BaseClass
{
   public void print()
   {
    console.WriteLine("Base Class Print Method");
   }
}
Public class DerivedClass : BaseClass
{
 public new void print()
 {
   base.print();
 }

}

Public Class program
{
 public static void Main()
 {
  DerivedClass d=new DerivedClass();
  d.print();
 }

}

output: Base Class Print Method

2.cast child type to parent Type and invoke the hidden member

public class BaseClass
{
   public void print()
   {
    console.WriteLine("Base Class Print Method");
   }
}
Public class DerivedClass : BaseClass
{
 public new void print()
 {
   base.print();
 }

}

Public Class program
{
 public static void Main()
 {
  DerivedClass d=new DerivedClass();
  var b=(BaseClass)d;
  b.print();
 }

}

output: Base Class Print Method

3.  BaseClass b=new DerivedClass();
    b.print();
 see this example in acove