C#中的接口实现多态

我们都知道虚方法实现多态,抽象方法实现多态等,我们今天来看看如何使用接口实现多态

1.首先我们先要来了解了解什么是接口,它存在的意识

01.接口就是为了约束方法的格式(参数和返回值类型)而存在的

02.接口可以实现多继承,弥补单继承的缺陷。

  03.接口可以看成是一个特殊的抽象类,通过反编译看源码可知

04.接口中方法不用访问修饰符,因为CLR会自动添加,并且不能有方法体

05.如果一个类实现了某个接口,就得实现该接口中所有的方法

06.接口要谨慎使用,防止出现接口污染!

07.接口仅仅代表一种能力,实现该接口的类和接口没有继承关系

08.接口是用来实现的,类是用来继承的。

09.其实很多时候,看似可以不用接口,因为接口就是一个方法的约定,

表明你这个类必须要有某些方法,但是不写接口也可以有这些方法,用了接口,

就可以使用接口变量,统一调用,实现多态

10.接口中只能定义方法,不能定义变量。

2.抽象类和接口的区别:

当需要的各个对象之间存在父子类关系时,可以考虑使用抽象类,

当各个对象之间不存在继承关系,只是有相同的能力时,而已考虑使用接口

3.接口的通俗理解

01.飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,

鸽子属于鸟抽象类。

02.就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),

但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);

一个门可以有锁(接口)也可以有门铃(多实现)。

门(抽象类)定义了你是什么,接口(锁)规定了你能做什么

(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))

下面我们举个用接口实现多态的例子:

01.新建一个飞的接口

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 接口 { //飞的接口 public interface IFly { //接口中方法不用访问修饰符,因为CLR会自动添加,并且不能有方法体 void Say(); } }

02.创建一个吃的接口

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 接口 { //吃的接口 public interface IEat { //接口中方法不用访问修饰符,因为CLR会自动添加,并且不能有方法体 void eat(); } }

03.创建一个鸟类来实现飞的接口和吃的接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 接口
{
   
//鸟实现飞的接口和吃的接口
    public class Grid:IFly,IEat  //注意  接口:接口叫继承  ,类:接口叫实现
    {

       
//如果一个类实现了某个接口,就得实现该接口中所有的方法
        public void Say()
        {
            Console.WriteLine(
"鸟在飞");
        }

       
public void eat()
        {
            Console.WriteLine(
"鸟在吃");
        }
    }
}

04.创建一个飞机类实现飞的接口

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0adc9fdb87dee0fb44303a6f9718d514.html