zoukankan      html  css  js  c++  java
  • 抽象类与接口--由一个调用接口方法的小实例所想到的

    今天看一园友的文章,实现在一个类中调用另一个类中所实现的接口方法,感觉方法不错,先整理代码如下:

     1 //定义一个接口
     2 public interface IOperateData
     3 {
     4   void ShowData();
     5 }
     6 
     7 //类A实现接口
     8 public class ClassA:IOperateData
     9 {
    10      public void ShowData()
    11         {
    12             Console.WriteLine("this is A method!");
    13         }
    14 }
    15 
    16 //方法1.泛型类B中调用类A的接口方法
    17 public class ClassB<T>  where T:IOperateData
    18 {
    19     public ClassB(T t)
    20  {
    21     t.ShowData();
    22  }
    23 }
    24     
    25 //调用如下
    26 ClassA a=new ClassA();
    27 ClassB<ClassA> b=new ClassB<ClassA>(a);
    28 
    29 //方法2.
    30 public class ClassC
    31 {
    32   public ClassC(IOperateData o)
    33     {
    34        o.ShowData();
    35     }
    36 }
    37 
    38 //调用如下
    39 ClassA a=new ClassA();
    40 ClassC c=new ClassC(a);

    第一种方法用泛型类,但为类型参数T加上约束,必须实现接口,当实例化该泛型类时,调用构造器就会去调用实现了接口方法的类型对象的方法;第二种方法更简洁:类中定义有参构造器,必须传入实现了接口方法的实例,并调用该实例的方法--
    由这个小示例想到接口与抽象类的区别,整理如下:

    1.接口定义了一组约束,这组约束中的方法不能有具体实现,实现该接口的类必须显示实现接口方法;而抽象类中定义的方法可以有具体实现,子类可以重写父类的方法,也可以继承(默认)

    2.抽象类与子类是单继承的,而接口是可以多继承的----一个类只可能继承自一个抽象类,但却可以实现多个接口。

    3.抽象类与子类之间是"是" 的关系,而接口是说"行为要按接口来完成"。例如:定义鸟的抽象类,鸽子、麻雀、鹦鹉都继承自该抽象类,它们都是鸟,都默认实现了"鸟"中定义的方法;定义了飞这个接口,飞机,麻雀,气球都能飞,但具体实现方法不一样

    4.抽象类的灵活之处在于,有了新的方法直接定义在父类中,子类自动继承,不必逐个定义,而接口呢,添加新的规范的话,实现了该接口的类都要去显示定义该方法

    5.接口既可以作用于值类型也可以作用于引用类型,但抽象类只能作用于引用类型(类,当然是引用类型)

    深究起来应该还有很多吧,但常用的估计就这些了

    算作对学习的一个小总结吧

  • 相关阅读:
    支付宝17年新春红包技术体系剖析
    从“扫月亮”到“扫福字”,扒一扒背后的支付宝AR框架体系
    【合集】支付宝春节红包背后的那些事——集五福,咻红包
    蚂蚁移动开发平台 mPaaS 3.0 智能化 + 生态化
    小程序 Serverless: 解放生产力,驱动研发效能提升
    深度解析:mPaaS 3.0全新组件
    vue--学习一
    .Net Mvc PagedList
    Integrated Security=SSPI
    IIS web site windows验证
  • 原文地址:https://www.cnblogs.com/baweier2013/p/3379641.html
Copyright © 2011-2022 走看看