C# 接口(接口可以继承接口)

接口可以继承接口

之前我们已经知道接口实现可以从基类被继承,而接口本身也可以从一个或多个接口继承而来。

  • 要指定某个接口继承其他的接口,应在接口声明中把基接口名称以逗号分隔的列表形式

    放在接口名称后面的冒号之后,如下所示。

  • 类在基类列表中只能有一个类名,而接口可以在基接口列表中有任意多个接口。

    • 列表中的接口本身可以继承其他接口。
    • 结果接口包含它声明的所有成员和基接口的所有成员。
      图16-11中的代码演示了3个接口的声明。IDataIO接口从前两个接口继承而来图右边部分
      显示IDataIO包含了另外两个接口。
csharp 复制代码
interface IDataIO:IDataRetrieve,IDatatStore
{
    interface IDataRetrieve
    {
        int GetData();
    }

    interface IDatatStore
    {
        void SetData(int x);
    }
    //从前两个接口继承而来
    interface IDataIO:IDataRetrieve,IDatatStore
    {

    }

    class MyData:IDataIO{
        int nPrivateData;
        public int GetData()
        {
            return nPrivateData;
        }

        public void SetData(int x)
        {
            nPrivateData=x;
        }
    }

    class Program{
        static void Main(){
            MyData data=new MyData();
            data.SetData(5);
            Console.WriteLine("{0}",data.GetData());
        }
    }
}

不同类实现一个接囗的示例

如下代码演示了已经介绍过的接口的一些方面。程序声明一个名为Animal的类,它被作为

其他一些表示各种类型动物的类的基类。它还声明了一个叫作ILiveBirth的接口。

Cat、Dog和Bird类都从Animal基类继承而来。Cat和Dog都实现了ILiveBirth接口,而Bird

类没有。

在Main中,程序创建了Animal对象的数组并用3个动物类的对象进行填充。然后,程序遍

历数组并使用as运算符获取指向ILiveBirth接口的引用,并调用了BabyCalled方法。

csharp 复制代码
interface ILiveBirth   //声明接口
{
    string BabyCalled();
}

class Animal{}   //基类Animal

class Cat:Animal,ILiveBirth    //声明Cat类
{
    string ILiveBirth.BabyCalled()
    {return "kitten";}
}

class Dog:Animal,ILiveBirth    //声明Dog类
{
    string ILiveBirth.BabyCalled()
    {
        return "puppy";
    }

    class Bird:Animal          //声明Bird类
    {

    }

    class Program
    {
        static void Main()
        {
            Animal[] animalArray=new Animal[3];   //创建Animal数组
            animalArray[0]=new Cat();             //插入Cat类对象
            animalArray[1]=new Bird();            //插入Bird类对象
            animalArray[2]=new Dog();             //插入Dog类对象
            foreach(Animal a in animalArray)      //在数组中循环
            {
                ILiveBirth b= a as ILiveBirth;    //如果实现ILiveBirth
                if(b!=null)
                    Console.WriteLine($"Baby is called:{b.BabyCalled()}");
            }
        }
    }
}

图16-12演示了内存中的数组和对象。

相关推荐
北执南念3 分钟前
如何在 Spring Boot 中设计和返回树形结构的组织和部门信息
java·spring boot·后端
遗憾皆是温柔6 分钟前
19. 重载的方法能否根据返回值类型进行区分
java·开发语言·面试·学习方法
ts码农6 分钟前
model层实现:
java·服务器·前端
幸幸子.21 分钟前
LeetCode 组合总数
c++·算法·leetcode
泰勒疯狂展开31 分钟前
Java研学-RabbitMQ(六)
java·rabbitmq·java-rabbitmq
☆璇34 分钟前
【C++】哈希
c++·算法·哈希算法
Warren981 小时前
Java Record 类 — 简化不可变对象的写法
java·开发语言·jvm·分布式·算法·mybatis·dubbo
SimonKing1 小时前
流式数据服务端怎么传给前端,前端怎么接收?
java·后端·程序员
Laplaces Demon1 小时前
Spring 源码学习(十)—— DispatcherServlet
java·后端·学习·spring
哈基米喜欢哈哈哈1 小时前
进程和线程
java·linux·windows·笔记