您的位置:首页 > 职场人生

黑马程序员——C#面向对象之多态

2013-05-01 22:31 246 查看
------- Windows Phone 7手机开发.Net培训、期待与您交流! -------
     -->C#面向过程三大特点就是封装、继承、多态。多态看似非常变态,实际上学习了多态之后才发现恍然大悟啊。

     -->里氏转换指的是子类可以无条件赋值给子类,如果父类指向的是子类,父类可以强制转换成子类。

     -->多态就是一种表现形式,多种执行结果。

     ---先看一个例子:

         class  Person

         {

                 public void Show()

                {Console.WriteLine("一个人类");}

        }

         class  Man:Person

         {

                 public void Show()

                {Console.WriteLine("男性");}

        }

         //普通访问。

         Person  p=new Person();

         p.Show();//显示“一个人类”。

         Man m=new Man();

         m.Show();//显示“男性”。

         //里氏转换。

         Man m1=new Man();

         Person p1=m1;

         p1.Show();//显示“一个人类”。父类方法只是隐藏,并没有消失。

         Man m2=(Man)p1;

         m2.Show();//显示“男性”

         //使用关键字new叫做显示隐藏父类方法的,说明父类也有此方法。如果不使用关键字new叫做隐式隐藏父类方法。

         //如果子类中想要把继承自父类的方法重写,让父类的方法消失,就需要在父类的方法前加virtual,在子类的方法前加override。

         class  Person

         {

                 public virtual void Show()

                {Console.WriteLine("一个人类");}

        }

         class  Man:Person

         {

                 public override void Show()

                {Console.WriteLine("男性");}

        }

         //普通访问。

         Person  p=new Person();

         p.Show();//显示“一个人类”。

         Man m=new Man();

         m.Show();//显示“男性”。

         //里氏转换。

         Man m1=new Man();

         Person p1=m1;

         p1.Show();//显示“男性”。父类的方法被子类的方法重写了,

         Man m2=(Man)p1;

         m2.Show();//显示“男性”

     --->记住口诀:new则隐藏,隐藏看类型;override则(virtual)重写,重写只看新。隐藏父类的方法时,父类的方法前是否在virtual无所谓,但重写父类的方法,父类的方法前必须加virtual,子类的方法前必须加override。

     -->当父类的方法被子类的方法重写时,那么父类的方法就不需要实现了,就可以用抽象方法。

     -->抽象方法就是没有方法体的方法,通俗点说就是没有大括号那段代码,小括号后面加分号结束,但是抽象方法必须在抽象类中。

         abstract class Person

         {

                 public abstract void Show();

         }

     -->上面就是一个抽象类中,含有一个抽象方法。

     -->注意:抽象类与抽象方法有abstract修饰,与public和internal修饰不冲突。

     ------------抽象方法没有方法体,以();结束,没有{ }代码段。

     ------------抽象方法以及抽象成员只能存在于抽象类中。

     ------------抽象类中可以有非抽象成员。

     ------------抽象方法的子类必须是实现方法体,或者子类的子类实现方法体,只要最终实现方法体即可。

        //通过抽象方法实现多态。

         abstract class  Person

         {

                 public abstract void Show()

        }

         class  Man:Person

         {

                 public override void Show()

                {Console.WriteLine("男性");}

        }

     -->多态是使用一种调用形式,实现不同的方法,从而达到不通过的功能。

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# 面向对象 多态