C#类的多态性

1.编译时的多态性:通过方法重载实现

一个类的对象调用若干同名方法,系统在编译时,根据调用方法的实参类型及实参的个数决定调用那个同名方法,实现何种操作。

2.运行时的多态性:通过虚方法实现(在方法声明前加上virtual修饰符为虚方法)

在系统运行时,不同对象调用一个名字相同,参数的类型及个数完全相同的方法,会完成不同的操作。

using System;
class A{ 
    public void F(){ //非虚方法
        Console.Write("   A.F");
    }
    public virtual void G(){ //虚方法
        Console.Write("   A.G");
    }
    static void F2(A aA){
        aA.G();
    }
}

class B:A
{ 
    new public void F(){ //覆盖基类的同名非虚方法F(),注意使用new
        Console.Write("   B.F");
    }
    public override void G(){ //覆盖基类的同名虚方法G(),注意使用override
        Console.Write("   B.G");
    }
}

class Test{
    static void Main(){
        B b=new B();
        A a1=new A();
        A a2=b;  //允许基类引用变量引用派生类对象,重点:a2引用派生类B对象b!!!
        a1.F(); //A.F
        a2.F();  //非虚方法,A.F
        b.F();  //B.F
        a1.G();  //G()为虚方法,因a1引用基类A对象,调用基类A的G(),A.G
        a2.G();  //G()为虚方法,因a2a2引用派生类B对象,调用派生类的G(),B.G
        F2(b);  //由于A aA=b,  B.G
        F2(a1);  //A.G;
}

应用:如在Person类中,公有方法Display()来显示个人信息,在派生类中Employee中,覆盖了基类的公有方法Display(),以显示新增信息。若希望隐藏这些细节,无论基类还是派生类,都调用一个显示方法,根据对象的不同,自动显示不同的信息,就可以用虚方法实现。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值