几行代码帮你搞懂C#中的接口、抽象类(抽象方法)、虚函数

几行代码帮你搞懂C#中的接口、抽象类(抽象方法)、虚函数


TestImplement1 Test1 = new TestImplement1();
TestImplement2 Test2 = new TestImplement2();
Test1.fun1();  //子类1调用基类中的普通方法1,该方法时对接口的实现
Test2.fun1();  //子类2调用基类中的普通方法1,该方法时对接口的实现

Test1.fun2();  //子类1调用基类中的普通方法2,该方法时对接口的实现
Test2.fun2();  //子类2调用基类中的普通方法2,该方法时对接口的实现

Test1.fun3();  //子类1调用普通方法3,该方法由子类自己定义
Test2.fun3();  //子类2调用普通方法3,该方法由子类自己定义

Test1.fun4();  //子类1调用抽象方法
Test2.fun4();  //子类2调用抽象方法

Test1.fun5();  //子类1没有重写基类中的虚方法5,因此这里调用的是基类的fun5
Test2.fun5();  //子类2重写了虚方法5,所以调用的是重写后的方法

public interface IBase  //继承IBase中的方法全部要实现
{
    public void fun1();
    public void fun2();
}

public abstract class Base : IBase
{
    public void fun1()
    {
        Console.WriteLine("这是对接口的第一个方法实现");
    }

    public void fun2()
    {
        Console.WriteLine("这是对接口的第二个方法实现");
    }

    public void fun3()
    {
        Console.WriteLine("这是子类的一个普通方法");
    }
    public abstract void fun4();
    public virtual void fun5() //虚方法必须要有实现
    {
        Console.WriteLine("这是基类提供的一个虚方法");
    }
}

public class TestImplement1 : Base
{
    public override void fun4()  //强制重写方法fun4
    {
        Console.WriteLine("子类1重写抽象方法fun4");
    }
}

public class TestImplement2 : Base
{
    public override void fun4() //强制重写方法fun4
    {
        Console.WriteLine("子类2重写抽象方法fun4");
    }

    public override void fun5()  //非强制,但也可以重写
    {
        Console.WriteLine("这里是子类重写了基类中fun5中的虚方法,不是强制要重写");
    }
}

宝,你肯定懂了,对吧?
什么,没懂,没事再看一遍!
又看了一遍,还不懂?宝,要不咱再看一遍
第三遍了,宝你一定懂了。什么还是不懂,宝如果我是你,我就取关了这傻逼博主了,写的什么垃圾。
如果有的代码你看三遍还是不懂,不用怀疑,写代码的那人就是个垃圾,换个人的博客看看。

你可能感兴趣的:(c#,开发语言)