zoukankan      html  css  js  c++  java
  • 接口和抽象类的区别转

     

    一、抽象类:
    抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。

    另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。


    二、接口:
    接口是引用类型的,类似于类,更和抽象类有所相似,以至于很多人对抽象类和接口的区别比较模糊。和抽象类的相似之处有三点:
    1、不能实例化;
    2、包含未实现的方法声明;
    3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);另外,接口有如下特性:
    接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。
    一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。


    接口实例
     public delegate void Del();
     public interface ITest
     {
        //int ?a = null;

        int A
       {
          get;
       }

        void Test();
        event Del OnDel;
        int this[int index]
       {
         get;
         set;
       }
     }
    注意!还有另外一种类不能被实例化:
    所有构造函数都被标记为private,这种类也是不能被实例化的,严格的说是不能在类外被实例化,可以在此类的内部实例化(这种方式可以用于实现单件设计模式)。注意一点,这样的类也不能够作为基类来继承。

    三、抽象类和接口的使用:
    抽象类用于部分实现一个类,再由用户按需求对其进行不同的扩展和完善;接口只是定义一个行为的规范或规定。
    抽象类在组件的所有实现间提供通用的已实现功能;接口创建在大范围全异对象间使用的功能。
    抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。
    抽象类主要用于设计大的功能单元;而接口用于设计小而简练的功能块。

    例如:
    Window窗体可以用抽象类来设计,可以把公有操作和属性放到一个抽象类里,让窗体和对话框继承自这个抽象类,再根据自己的需求进行扩展和完善。
    打印操作可以作为一个接口提供给每个需要此功能的窗体,因为窗体的内容不同,就要根据他们自己的要求去实现自己的打印功能。打印时只通过接口来调用,而不用在乎是那个窗体要打印。


    -----------------------

    二。

    类和接口有何区别?
    从书上摘下来的,还是比较好懂的:
    1.抽象类是一个不完全的类,需要进一步专业化.接口只是一个行为的规范或规定;
    2.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法;
    3.一个类一次可以实现若干个接口,但是只能扩展一个父类
    4.接口可以用于支持回调,而继承并不具备这个特点.
    有些直接就是接口与类的区别.第四点我不是很明白......
    一个类如果要实现某个接口,除非它实现了该接口中承诺的所有方法,否则(即未实现或者仅仅实现部分方法),该类必须被声明为抽象类.而该类的子类也继承了这一特性

     

     

    1.抽象类是一个不完全的类,需要进一步专业化.接口只是一个行为的规范或规定;
    2.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法;
    3.一个类一次可以实现若干个接口,但是只能扩展一个父类
    4.接口可以用于支持回调,而继承并不具备这个特点.


    如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有继承类都随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口。
    如果创建的功能将在大范围的全异对象间使用,则使用接口。
    抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
    如果要设计小而简练的功能块,则使用接口。
    如果要设计大的功能单元,则使用抽象类。
    如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。抽象类允许部分实现类,而接口不包含任何成员的实现

  • 相关阅读:
    Could A New Linux Base For Tablets/Smartphones Succeed In 2017?
    使用libhybris,glibc和bionic共存时的TLS冲突的问题
    6 Open Source Mobile OS Alternatives To Android in 2018
    Using MultiROM
    GPU drivers are written by the GPU IP vendors and they only provide Android drivers
    Jolla Brings Wayland Atop Android GPU Drivers
    How to Use Libhybris and Android GPU Libraries with Mer (Linux) on the Cubieboard
    闲聊Libhybris
    【ARM-Linux开发】wayland和weston的介绍
    Wayland and X.org problem : Why not following the Android Solution ?
  • 原文地址:https://www.cnblogs.com/snlfq2000/p/1821219.html
Copyright © 2011-2022 走看看