Thursday 9 April 2015

OOPS : New vs Override keyword

using System;

using System.Data;

using System.Text;

using System.Windows.Forms;


namespace BaseDerive

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }


        private void Form1_Load(object sender, EventArgs e)

        {


            BaseClass b = new BaseClass();

            b.func1();


            DeriveClass d = new DeriveClass();

            d.func1();


            //Calls Base class function 1 as new keyword is used.

            BaseClass bd = new DeriveClass();

            bd.func1();


            //Calls Derived class function 2 as override keyword is used.

            BaseClass bd2 = new DeriveClass();

            bd2.func2();


        }

    }


    public class BaseClass

    {

        public virtual void func1()

        {

            MessageBox.Show("Base Class function 1.");

        }


        public virtual void func2()

        {

            MessageBox.Show("Base Class function 2.");

        }


  public void func3()

        {

            MessageBox.Show("Base Class function 3.");

        }

    }


    public class DeriveClass : BaseClass

    {

        public new void func1()

        {

            MessageBox.Show("Derieve Class fuction 1 used new keyword");

        }


        public override void func2()

        {

            MessageBox.Show("Derieve Class fuction 2 used override keyword");

        }


public void func3()

        {

            MessageBox.Show("Derieve Class fuction 3 used override keyword");

        }


    }

}

This is a window application so all the code for calling the function through objects is written in Form_Load event.
As seen in above code, I have declared 2 classes. One works as a Base class and second is a derieve class derived from base class.

Now the difference is

new: hides the base class function.
Override: overrides the base class function.


BaseClass objB = new DeriveClass();


If we create object like above notation and make a call to any function which exists in base class and derive class both, then it will always make a call to function of base class. If we have overidden the method in derive class then it wlll call the derive class function.

For example…

objB.func1(); //Calls the base class function. (In case of new keyword)

objB.func2(); //Calls the derive class function. (Override)

objB.func3(); //Calls the base class function.(Same prototype in both the class.)

Note:
// This will throw a compile time error. (Casting is required.)
DeriveClass objB = new BaseClass(); 


//This will throw run time error. (Unable to cast)
DeriveClass objB = (DeriveClass) new BaseClass(); 



No comments:

Post a Comment