• 【框架设计】接口的奥秘


    接口,对于大家都不陌生,至于何时使用,怎么使用?这里举一个例子:假如一个类A,负责传输数据。而类B,恰好是接收数据。我们还需要一个类C用来接收和传输数据。那么怎么样让A类和B类继承C呢?有的编程语言,允许多继承。子类可以继承多个父类。但是在C#中,定义不能多继承,但是可以使用多个接口。那么要继承接口就需要interface定义它ID,内部可以封装方法,但是注意,倘若你要继承ID接口,那么接口内部的所有方法属性都要实现。说到此处,不免有人问:“接口和父类继承有何区别?”.

    一般是泛类中的个体,即is--a的关系使用继承。如:狗是动物的一种可以使用,Class 狗:动物

    而接口强调是对象具有某种能力,即can--do的关系使用接口。如:大雁会飞,Class 大雁:I飞

    C#定义子类不许继承多个类,但是可以多个接口。如:唐老鸭是动物,它会说话,会游泳,Class 唐老鸭:动物,I说话,I游泳


    类和接口继承问题:

    System.Object类是所有类的根类,它定义的四个方法:ToString,Equals,CetHashCode,GetType适用于任何类。所有继承Object类的类实际继承的是方法签名base()和具体实现。

    接口:实际上是为一组方法签名,指定一个方法名,不加以方法的实现。可以被多个类来继承,可以定义事件,方法,参数/无参属性。不许定义构造器方法和实例字段。提供接口必须实行所有接口中的方法。具有can--do的关系。

    CLR要求接口方法标记Virtual。这样才能被派生类重写。如果不标记,默认Virtual和Sealed,阻止派生类重写方法接口。

    接口方法隐式和显示实现:实例解析

    接口:

    复制代码
    internal sealed class SimpleType : IDisposable
        {
            //接口方法的隐式实现
           public void Dispose()
           {
               Console.WriteLine("隐式 Dispoable");
           }
            //接口方法的显式实现
           void IDisposable.Dispose()
            {
    
                Console.WriteLine("显式 Dispoable");
            }
        }
    复制代码

    实现:

    复制代码
    static void Main(string[] args)
            {
                SimpleType st = new SimpleType();
                st.Dispose();
                IDisposable d = st;
                d.Dispose();
                Console.ReadLine();
            }
    复制代码

    结果:


    泛型接口问题:

    IComparable<T>有一下几个好处:

    1,编译时安全,可以有任意类型,若有异常通过Object类抛出。

    2,操作值类型时候,不需要太多装箱,也正是比非泛型接口优化之处。性能提高。

    3,可以根据参数T不同使用同一个接口若干次。代码冗杂性小,可读性高。性能提升。


    对基类和接口操作的实例运用:

    描述:有一个动物类,它可以派生出多个类。并且其中一个类既要实现继承又要实现接口。在控制台程序编写并输出此派生类的所有方法。

    基类派生多个类,并且其中一类继承接口

    //基类
    public abstract   class Base
    {
        public abstract void Animal();
    }
    //派生类,继承基类和接口
    public  class  Brid:Base,Interface1
    {
        public override void Animal()
        {
            Console.WriteLine("我是大雁!");
        }
        public void Fly()
        {
            Console.WriteLine("我会飞!");
        }
        public void Say()
        {
            Console.WriteLine("我会说话!");
        }
         
    }
    //派生类
    public class Brid1 : Base
    {
        public override void Animal()
        {
            Console.WriteLine("我是笨笨鸟!");
        }
    }

      

    接口的定义

    interface Interface1
    {
         void Fly();
         void Say();
    }

      

    调用派生类程序

    static void Main(string[] args)
    {
        Brid b1 = new Brid();
        b1.Animal();
        Interface1 d = b1;
        d.Fly();
        d.Say();
        Console.ReadKey();
     }

      

    输出结果


    总结:到此接口基本定义和方法已经结束,以及使用的定义。接口多是起着内部方法的作用,有不同于类。在编程中会给你带来更多的便利和惊喜。

    http://www.cnblogs.com/baiboy
     
    分类: C#框架设计

    Java中抽象类跟接口的区别

     

    抽象类:抽象类是一种特殊的基类,里面除包含一些基本的属性和方法之外,还能包含一些只声明但没有实现的方法,用abstract去声明

    例如:

    接口:接口是一种更加抽象的类型,里面声明的方法全部公开给实现者去实现,并不关心具体细节 关键字是interface

    例如:

    综上所看 可以看出抽象类和接口的主要区别有:

    1.抽象类可以有自己的方法,但接口的方法只有声明

    2.抽象类的抽象方法使用abstract声明

    其它需要注意的有:

    1.一个类只能继承一个实现类,但是可以实现多个接口

    2.当一个抽象类和一个接口有公共的属性时,如果一个类同时实现这个抽象类和接口 则编译不会通过

     
     
     
    标签: Java
  • 相关阅读:
    python 垃圾回收机制
    @property 取代getter setter方法
    ==值相等 is同一性
    循环获取文件名,拼接路径打印
    python 闭包
    python生成器
    hadoop集群环境搭建之zookeeper集群的安装部署
    hadoop集群环境搭建之安装配置hadoop集群
    hadoop集群环境搭建准备工作
    linux下安装jdk
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2969981.html
Copyright © 2020-2023  润新知