抽象类和接口的区别、以及虚函数介绍

很多面试的时候经常问的问题,抽象类和接口的区别

具体的区别我也不是很清楚,我把我认为有道理的东西传授给你,希望能帮到你,

抽象类和接口区别不是很明显,除了多重继承外,感觉抽象类完全可以替代接口,个人感觉在于你要做什么用,抽象类为了代码复用性,接口为了实现多态性,你可以想一想你要用这两个的初衷是什么来决定

不过抽象类如下:

public abstract class Animal
{
    public abstract string Name {get; set;}

    public abstract void Show();

    public void MakeVoice()
    {
        Console.WriteLine("hello, world!");
    }
}

接口如下:

interface InterfaceStudent
{

    void Method1();

    void Method2(int age);

    void Method3(string name, int age);
}

什么是虚函数,关键字还记得吗?virtual

虚函数和抽象函数的区别,继承时虚函数不需要被实现,抽象方法必须被实现

下面代码中不重写GetName也是对的,执行的是虚方法中的代码,重写之后实现的是重写之后的函数

虚方法特点:

虚方法前不允许有static,abstract,override 修饰符

虚方法不能是私有的,因此不能用private

虚方法(public virtual string GetName() )与 非虚方法(public string GetName())最大区别是:

虚方法可以被派生类实现,非虚方法不能

public class VirtualTest: VirtualSingle
    {
        //public override void GetName()
        //{
        //    //base.GetName();
        //    Console.WriteLine("my name is winner again");
        //}

        public override void GetAge()   ××××××××××× 
        {
            Console.WriteLine("method is unavailable. ×××××××××××");
        }
    }

    public class VirtualSingle
    {
        public virtual void GetName()
        {
            Console.WriteLine("my name is winner");
        }

        public void GetAge()
        {
            Console.WriteLine("my age is 18");
        }
    }



 VirtualTest vt = new VirtualTest();
 vt.GetName();
发布了17 篇原创文章 · 获赞 3 · 访问量 4041

猜你喜欢

转载自blog.csdn.net/HPFBoy/article/details/100691325
今日推荐