Pages

Sunday, September 13, 2009

Shadowing Concept in OOPs

 

The following Code has been written in C#

Basic Virtual Method Overriding in the Child has been explained in the below code

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5:  
   6: namespace Test
   7: {
   8:     class Program
   9:     {
  10:         static void Main(string[] args)
  11:         {
  12:           //  B Bobj = new A(); Correct 
  13:             A Aobj = new B();
  14:             B Cobj = new B();
  15:             A Dobj = new A();
  16:  
  17:             Aobj.MyPrint();
  18:             Cobj.MyPrint();
  19:             Dobj.MyPrint();
  20:  
  21:         }
  22:     }
  23:     public class A
  24:     {
  25:         public virtual void MyPrint()
  26:         {
  27:             Console.WriteLine("This method belongs to Class A");
  28:         }
  29:     
  30:     }
  31:     public class B : A
  32:     {
  33:         public override void MyPrint()
  34:         {
  35:             Console.WriteLine("This method belongs to Class B");
  36:         }
  37:     }
  38: }
  39:  
  40:  
  41: /*Output
  42: This method belongs to Class B
  43: This method belongs to Class B
  44: This method belongs to Class A
  45: */

Example 1: This is normal Basic Overriding concept


 



   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5:  
   6: namespace Test
   7: {
   8:     class Program
   9:     {
  10:         static void Main(string[] args)
  11:         {
  12:           //  B Bobj = new A(); Correct 
  13:             A Aobj = new B();
  14:             B Cobj = new B();
  15:             A Dobj = new A();
  16:  
  17:             Aobj.MyPrint();
  18:             Cobj.MyPrint();
  19:             Dobj.MyPrint();
  20:  
  21:         }
  22:     }
  23:     public class A
  24:     {
  25:         public virtual void MyPrint()
  26:         {
  27:             Console.WriteLine("This method belongs to Class A");
  28:         }
  29:     
  30:     }
  31:     public class B : A
  32:     {
  33:         public new void MyPrint()
  34:         {
  35:             Console.WriteLine("This method belongs to Class B");
  36:         }
  37:     }
  38: }
  39:  
  40:  
  41: //Output
  42: //This method belongs to Class A
  43: //This method belongs to Class B
  44: //This method belongs to Class A

Example2: The shadowing concept in OOPs


 


Lets take the Example 1


“A Aobj =new B() ; Aobj.MyPrint()”;


Output:- This method belongs to Class B


And Lets take the Example 2


“A Aobj =new B() ; Aobj.MyPrint()”;


Output:- This method belongs to Class A


So why is the Output is different ?????


When you observe the Definition of B in Example 1

  25:         public virtual void MyPrint()

  we are acutally  OVERRIDEING so when you say “new B()” always you will be accessing the Method inside Class B.


But in Example 2 ,The definition of B is

  33:         public new void MyPrint()

This time shadowing is happening even you say new B() the childs method will be shadowed and you will be accessing the Parent method.

0 comments: