zoukankan      html  css  js  c++  java
  • C#接口(Interface)

    继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功能是只用基类无法实现的

    1.接口用于描述一组类的公共方法/公共属性. 它不实现任何的方法或属性,只是告诉继承它的类至少要实现哪些功能,继承它的类可以增加自己的方法.

    2.使用接口可以使继承它的类: 命名统一/规范,易于维护.比如: 两个类 "狗"和"猫",如果它们都继承了接口"动物",其中动物里面有个方法Behavior(),那么狗和猫必须得实现Behavior()方法,

    并且都命名为Behavior这样就不会出现命名太杂乱的现象.如果命名不是Behavior(),接口会约束即不按接口约束命名编译不会通过.

    3.提供永远的接口。 当类增加时,现有接口方法能够满足继承类中的大多数方法,没必要重新给新类设计一组方法,也节省了代码,提高了开发效率.

    举个代码示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    //公共接口: "动物"
    public Interface IAnimal
    {
    int EyeNumber;
    private void Behavior();//行为方法,描述各种动物的特性
    }
    //类: 狗
    public Dog : IAnimal
    {
    string ActiveTime = "白天";
    private void Behavior()
    {
    {
    Console.Write("我晚上睡觉,白天活动");
    }
    }
    //类: 猫
    public Cat: IAnimal
    {
    string ActiveTime = "夜晚";
    private void Behavior()
    { {
    Console.Write("我白天睡觉,晚上活动");
    }
    }
    //简单的应用:
    public static Main()
    {
    Dog myDog = new Dog();
    myDog.Behavior(); //输出: "我晚上睡觉,白天活动"
    Cat myCat = new Cat();
    myCat.Behavior(); //输出: "我白天睡觉,晚上活动"
    }

    以上调用不同的类的相同名方法,会输出不同的东东,也就是说每个类里面的同名方法完成的功能可以是完全不同的.

    更进一步,不是用上面Main方法这样一个一个调用类的方法,用多态性实现其调用.
    看一下下面这个方法:

    1
    2
    3
    4
    public Behavior(IAnimal myIanimal)
    {
    myIanimal.Behavior();
    }

    其参数是<<接口类型>>,任何继承它的类都可以调用此方法,此方法能根据类的不同调用不同的类中的方法. 也即能够自己根据不同的类,完成不同的类的功能.

    多态性代码示例: 

    1
    2
    3
    4
    Dog myDog = new Dog();
    Cat myCat = new Cat();
    Behavior(myDog); //Behavior接受“狗”类实例
    Behavior(myCat); //Behavior接受“狗”类实例

    这样Behavior方法写一次就能完成所有继承它的类中的相同名方法的不同功能. 非常方便,同样,由于“动物软件”功能需求,需要再增加一个"龟"类:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //类: 龟
    public Tortoise: IAnimal
    {
    string ActiveTime = "很难说";
    private void Behavior()
    {
    {
    Console.Write("我可以不活动,一睡就睡五千年!");
    }
    }

    那么也可以调用上面多态方法,所以说接口使方法具有较好扩展性.
    如果继承它的类很多的话,有多少好处是可想而知的!

    另外, 也有抽象类能够实现但接口不能实现的情况:

    1. 在抽象类中可以加代码逻辑,但接口不能.

    2. 如果要在接口中增加一个方法, 所有实现它的类都强制重载一遍此方法, 如果重载类很多时, 会增大工作量.

    总之, 一般在仅实现单继承用途时, 尽量用抽象类, 功能也更强些!

  • 相关阅读:
    ORACLE 查看进程数,已执行任务数, 剩余任务数,删除指定任务
    ORACLE 收集统计整个用户数据
    解决Hystrix dashboard Turbine 一直 Loading…… 及其他坑
    利用 Maven 构造 Spring Cloud 微服务架构 模块使用 spring Boot构建
    AES加解密
    JAVA POI XSSFWorkbook导出扩展名为xlsx的Excel,附带weblogic 项目导出Excel文件错误的解决方案
    JAVA 文件的上传下载
    shell启停服务脚本模板
    JAVA 设计模式之 原型模式详解
    JAVA 设计模式之 工厂模式详解
  • 原文地址:https://www.cnblogs.com/yoyolm2014/p/9431387.html
Copyright © 2011-2022 走看看