抽象类,接口

子类继承父类的属性值但是父类的属性值并不适合子类的需要,就需要多态。

子类只能重写(override)父类允许修改的属性,也就是父类中有虚拟属性(virtual)的属性。

每个类都可以是其他类的子类也可以是其他类的父类。

bird b = new bird();

            plane p = new plane();

            owl o = new owl();

            Console.WriteLine(b.flying());

            Console.WriteLine(p.flying());

            Console.WriteLine(b.eat());

            Console.WriteLine(o.eat());

            Console.ReadKey();

public  class fly

    {

        public virtual string flying() { return "i can fly"; }

}

public  class bird:fly

    {

        public override string flying()

        {

            return "拍下翅膀就能飞";

        }

        public virtual string eat() { return "要吃东西"; }

    }

public  class plane:fly

    {

        public override string flying()

        {

            return "有引擎才能飞";

        }

    }

public  class owl:bird

    {

        public override string eat()

        {

            return "要吃肉";

        }

    }

Plane跟bird是fly 的子类,分别重写了fly里的flying(),owl是bride的子类,重写了eat()。Bird里的eat 是父类里没有的。

普通的类中所有的方法都变成虚方法,没有人用最基础的方法,全部都需要重写,那么就不需要那么费劲把普通类中的方法主体都写完,而是,直接定义成抽象类,并且都写成抽象方法。

只声明方法的名称和返回类型,具体方法主体是什么,继承过去以后自己去实现。

抽象方法一定是在抽象类中

有抽象方法的类,一定是抽象类抽象类中不一定只有抽象方法

抽象类,抽象类就是为了被继承而出现的。当子类中的属性都需要重写时,父类可以写成抽象类。抽象类的关键字是abstract。抽象类不需要明确的和函数体。

public abstract class ren

    {

        public abstract string shuijiao();

        public abstract string  chifan();

        public virtual string xingwei()

        {

            return "有行为动作";

        }

    }

接口:interface

就是让类更加完善

都是抽象方法,不能有一点实在东西,全部内容都需要在子类中进行实现

接口的关键字是interface

public interface yule

    {

        string youxi();

        string dianying ();

       

    }

不需要class,也是虚方法,返回类型之前的访问修饰符也不用写。所有的在子函数中声明。

public  class nanren:ren ,yule     {

        public override string chifan()

        {

            return "大口吃饭";

        }

        public override string shuijiao()

        {

            return "在床上睡";

        }

        public string youxi()

        {

            return "lol";

        }

        public  string dianying()

        {

            return "爵迹";

        }

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace 抽象类_接口

{

    class Program

    {

        static void Main(string[] args)

        {

            nanren n = new nanren();

          

            Console.WriteLine(n.youxi());

            Console.ReadLine ();

        }

    }

}

原文地址:https://www.cnblogs.com/lanrenqilanming/p/5857174.html