博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

虚方法、抽象方法、接口方法

Posted on 2017-09-29 18:50  米粒3  阅读(462)  评论(0编辑  收藏  举报

1.virtual方法(虚方法)

virtual方法用于在基类中修饰子类,会遇到下面2种情况:

情况1:子类没有重写,则子类调用的是基类的方法。

情况2:子类重写了,则子类调用的重写的方法。

2. abstract方法(抽象方法)

抽象方法只是可以在抽象类中出现,并且没有具体的实现。抽象类必须在派生类中通过override实现。派生类必须全部实现父类的方法,否则派生类也需要定义为抽象类。

3.接口方法

接口方法必须出现在接口中,没有方法的实现,只有方法名称,参数和返回值。派生类必须全部实现父类方法。

 

下面定义几个类具体实现以下:

 

 public abstract class Animal
    {
        public abstract void Eat();

        public virtual void Run()
        {
            Console.WriteLine("小动物当然会跑了..");
        }
    }

    public class Cat:Animal,IAction
    {
        public override void Eat()
        {
            Console.WriteLine("猫咪吃鱼");
        }

        public void Fly()
        {
            Console.WriteLine("猫咪会飞吗?你是不是傻..");
        }
    }

 interface IAction
    { 
        void Fly();
    }


    public abstract class Plane
    {
        public abstract void AddOil();
    }

    public class Plane747:Plane,IAction
    {
        public override void AddOil()
        {
            Console.WriteLine("波音747 应该加机油了奥");
        }
        public void Fly()
        {
            Console.Write("我是波音747,当然会飞罗..你以为我像猫咪那么笨..");
        }
      
    }

 public class HelloWorld
    {
        public virtual void Hello()
        {
            Console.WriteLine("Hello World,没有重写");
        }
    }
    public class ExtendHelloWorld1:HelloWorld
    {

    }
    public class ExtendHelloWord2 : HelloWorld
    {
        public override void Hello()
        {
            Console.WriteLine("Hello World 怎么够,要Hello All The World");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            new ExtendHelloWorld1().Hello();
            new ExtendHelloWord2().Hello();
            Console.WriteLine("----------------------------------");

            new Cat().Eat();
            new Cat().Fly();
            new Cat().Run();
            Console.WriteLine("----------------------------------");

            new Plane747().AddOil();
            new Plane747().Fly();

            Console.ReadLine();
        }
    }