C# 虚方法和抽象方法

虚方法

关键字:virtual

添加关键字virtual之后,会把方法定义为虚方法

实例

public class VirA{

    public virtual void VirTest(){
    // 这是一个虚方法
    }
}

虚方法可以被子类派生,用override重写VirTest

public class VirChild:VirA{

    public override void VirTest(){
        base.VirTest();
        //重写父类的方法
    }
}

这样一个简单的重写就完成了

重写之后,还可以通过base.VirTest调用父类原本的代码

override派生过的方法,还可以被继续派生

public class VirGrandson:VirChild{

    public override void VirTest(){
        base.VirTest();
        //重写父类的方法
    }
}

VirGrandson——继承——>VirChild——继承——>VirA

特点:

虚方法更容易维护,修改或者维护时,可以不改动底层源码,直接修改它的重写方法

 

抽象方法

关键字:abstract

添加关键字abstract之后,会把方法定义为抽象方法

抽象方法只能定义在抽象类内

实例

///抽象类
public abstract class AbsParent
{
    ///抽象方法
    public abstract void AbsTest();

}

我们定义了一个抽象类和抽象方法

public class AbsChild: AbsParent
{
    public override void AbsTest()
    {
       //实现抽象类
       //无法使用base.AbsTest()
    }
}

继承抽象方法不能使用base.AbsTest,因为它没有方法实体


public class AbsGroundSun : AbsChild
{
    public override void AbsTest()
    {
        base.AbsTest();
    }
}

还可以再被继承,派生.这个时候可以使用base的方法了,因为我们的AbsChild已经实现了方法主体

特点

抽象方法必须放在抽象类中

抽象方法不能是私有的

抽象类被继承的时候,子类必须实现抽象类里面的所有抽象方法

抽象方法被实现一定是用override关键字,不能用new, (new 相当于是一个新的方法了,和父类的方法都没关系了,没有血缘关系,只是长得像)

抽象类中可以拥有其他类型的方法

和接口的区别

抽象类是单继承的,接口可以多继承

抽象类里面除了抽象方法,还可以写普通方法,虚方法,静态方法,接口只能写规范,不能写方法主体,也不能写别的方法

就像这张图一样,我们只能继承人啊,不能再是猫,狗或者别的物种了

但是接口就像技能一样,有时间就可以学一个新技能

抽象方法和虚方法的区别

抽象方法只写个规范,不写方法实体(可以把它看成一个懒虫,啥也不干)

虚方法有自己的方法主体(就像一个勤劳的农民伯伯),子类继承了它之后还可以调用他的方法(请它出山坐诊,和诸葛亮一样啊,不给退休,干到死)

 

掰掰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪小心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值