C#面向对象之多态

     -->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("男性");}
        }

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

     备注:写于2013年6月9日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值