【C#】虚方法和抽象方法

前言

   当子类方法和父类方法相同时,可以隐藏基类方法,也可以用虚方法,这时子类就可以重写父类的方法了,这就是类的多态形式,重写还可以用在抽象方法中,并且是抽象方法的类就必须重写,虚方法和抽象方法都能让子类重写,它们之间有什么区别呢?

虚方法

   类的方法名可以和父类的方法名重名,但是会报绿线,为了解决这个问题可以在子类方法的修饰符后面加New,第二种方法就是在父类的访问修饰符后加Virtual,在基类中使用virtual修饰的方法称为虚方法。
1. virtual修饰符不能与static、abstract或者override修饰符同时使用;
2. 方法重写与积累的签名必须一致
3. virtual不能与private一起使用,因为虚方法不能是私有的
4. 可以重写override,写可以不override

这里写图片描述
在上图代码中,在基类Person中定义了虚方法GetName(),现在在子类Teacher中重写GetName()方法:
这里写图片描述
在子类中实例化并且调用:
这里写图片描述

抽象方法

  
- 抽象方法必须用在抽象类中,有抽象类的不一定有抽象方法
- 子类不能写成抽象类,因为只有子类能重写,抽象类中的抽象方法必须被子类重写
- 抽象类除了类有abstract修饰符,它内部跟普通类一样,可以有:属性、构造、已经实现的方法。
- 必须重写

namespace _01.多态抽象方法和抽象类
{
    class Program
    {
        static void Main(string[] args)
        {
            Pig pig = new Pig(); //实例化派生类 等价于 Aniaml pig = new Pig();
            pig.Shout();//使用派生类对象实例化抽象类
            Console.ReadKey();
        }
    }
    public abstract class Aniaml//声明抽象类
    {  
        public abstract void Shout(); //抽象方法只能定义在抽象类中,没有方法体
    }
    public class Pig:Aniaml //继承抽象类,子类必须重写抽象方法
    {
        public override void Shout() //重写抽象类的抽象方法
        {
            Console.WriteLine("哼哼。。。");
        }
    }
}

虚方法和抽象方法比较

虚方法抽象方法
用virtual修饰用abstract修饰
基类中要有方法体基类中不允许有方法体
可以被子类override必须被子类override
除了密封类都可以写只能在抽象类中

总结

   通过比较清晰了不少,在以后的学习和运用中一定会越来越熟练。

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值