Polymorphism Example

Inheritance without polymorphism

public class BaseA
{
	public void Display()
	{
	 Console.WriteLine('Display Method BaseA');	 
	}
}

public class DerivedA : BaseA
{
//Warning InheritanceExample.DerivedA.Display()' hides inherited member 'InheritanceExample.BaseA.Display()'.
//Use the new keyword if hiding was intended.
	public void Display()
	{
	Console.WriteLine('Display Method DerivedA');
	}
}

public class DerivedB : BaseA
{
	public void Display()
	{
	Console.WriteLine('Display Method DerivedB');
	}
}

Main Method

static void Main(string[] args)
{
	BaseA AObj = new BaseA();
	AObj.Display();

	DerivedA ADerObj = new DerivedA();
	ADerObj.Display();

	BaseA AObj1 = new DerivedA();
	AObj1.Display();
	Console.ReadLine();
}


<strong>Output</strong>

Display Method BaseA
Display Method DerivedA
Display Method BaseA


//Error 1 Cannot implicitly convert type BaseA' to DerivedA'.
//An explicit conversion exists (are you missing a cast?)

DerivedA AObj2 = new BaseA();
AObj2.Display();

//Unable to cast object of type BaseA' to type DerivedA'.

DerivedA AObj2 = (DerivedA)new BaseA();
AObj2.Display();

Using new keyboard:

public class BaseA
{
public virtual void Display()
	{
	Console.WriteLine('Display Method BaseA');
	}
}

public class DerivedA : BaseA
{
	public new virtual void Display()
	{
	Console.WriteLine('Display Method DerivedA');
	}
}

public class DerivedB : BaseA
{
	public new virtual void Display()
	{
	  Console.WriteLine('Display Method DerivedB');
	}
}

Inheritance using polymorphism

public class BaseA
{
	public virtual void Display()
	{
	  Console.WriteLine('Display Method BaseA');
	}
}

public class DerivedA : BaseA
{
	public override void Display()
	{
	Console.WriteLine('Display Method DerivedA');
	}
}

public class DerivedB : BaseA
{
	public override void Display()
	{
	Console.WriteLine('Display Method DerivedB');
	}
}

static void Main(string[] args)
{
	BaseA AObj = new BaseA();
	AObj.Display();

	DerivedA ADerObj = new DerivedA();
	ADerObj.Display();

	BaseA AObj1 = new DerivedA();
	AObj1.Display();

	BaseA AObj2 = new DerivedB();
	AObj2.Display();

	//DerivedA AObj3 = (DerivedA)new BaseA(); Casting error
	// AObj2.Display();
	Console.ReadLine();
}

Output

Display Method BaseA
Display Method DerivedA

Display Method DerivedA
Display Method DerivedB