zoukankan      html  css  js  c++  java
  • 区分接口和抽象类

    一 . 接口

    1 因为C#不支持多重继承,所以有了接口,一个类只能继承一个父类,但可以实现多个接口,接口本身也可以继承多个接口。

    2 接口里面的成员变量默认都是public static final类型的。必须被显示的初始化。

    3 接口里面的方法默认都是public abstract类型的。隐式声明。

    4 接口没有构造方法,不能被实例化。

    5 接口不能实现另一个接口,但可以继承多个接口

    6 类如果实现了一个接口,那么必须实现接口里面的所有抽象方法,否则类要被定义为抽象类

    2 . 抽象类

    1 如果将一个类声明为abstract,此类不能生成对象,只能被继承使用。

    2  抽象方法必须存在于抽象类中。

    3  抽象类中可以有一般的变量和一般的方法。

    4 子类继承抽象类必须实现其中抽象方法,除非子类为抽象类。 
       private void print(){};此语句表示方法的空实现。 
       abstract void print(); 此语句表示方法的抽象,无实现。

    接口和抽象类的区别

    1 接口只能包含抽象方法,抽象类可以包含普通方法。 
    2 接口只能定义静态常量属性,抽象类既可以定义普通属性,也可以定义静态常量属性。 
    3 接口不包含构造方法,抽象类里可以包含构造方法。    

    抽象类不能被实例化,但不代表它不可以有构造函数,抽象类可以有构造函数,备继承类扩充

    1 接口是核心,其定义了要做的事情,包含了许多的方法,但没有定义这些方法应该如何做。 
    2 如果许多类实现了某个接口,那么每个都要用代码实现那些方法 
    3 如果某一些类的实现有共通之处,则可以抽象出来一个抽象类,让抽象类实现接口的公用的代码,而那些个性化的方法则由各个子类去实现。

    所以,抽象类是为了简化接口的实现,他不仅提供了公共方法的实现,让你可以快速开发,又允许你的类完全可以自己实现所有的方法,不会出现紧耦合的问题。

    应用场合很简单了 
    1 优先定义接口 
    2 如果有多个接口实现有公用的部分,则使用抽象类,然后集成它。

    如果单从具体代码来看,对这两个概念很容易模糊,甚至觉得接口就是多余的,因为单从具体功能来看,除多重继承外(C#,Java中),抽象类似乎完全能取代接口。但是,难道接口的存在是为了实现多重继承?当然不是。我认为,抽象类和接口的区别在于使用动机。使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。所以,如果你在为某个地方该使用接口还是抽象类而犹豫不决时,那么可以想想你的动机是什么。

    看到有朋友对IPerson这个接口的质疑,我个人的理解是,IPerson这个接口该不该定义,关键看具体应用中是怎么个情况。如果我们的项目中有Women和Man,都继承Person,而且Women和Man绝大多数方法都相同,只有一个方法DoSomethingInWC()不同(例子比较粗俗,各位见谅),那么当然定义一个AbstractPerson抽象类比较合理,因为它可以把其他所有方法都包含进去,子类只定义DoSomethingInWC(),大大减少了重复代码量。

    但是,如果我们程序中的Women和Man两个类基本没有共同代码,而且有一个PersonHandle类需要实例化他们,并且不希望知道他们是男是女,而只需把他们当作人看待,并实现多态,那么定义成接口就有必要了。

    总而言之,接口与抽象类的区别主要在于使用的动机,而不在于其本身。而一个东西该定义成抽象类还是接口,要根据具体环境的上下文决定。

    再者,我认为接口和抽象类的另一个区别在于,抽象类和它的子类之间应该是一般和特殊的关系,而接口仅仅是它的子类应该实现的一组规则。

    (转自脚本之家)

  • 相关阅读:
    使用SilverLight构建插件式应用程序(九) —聊天插件客户端的实现
    .NET 访问JAVA的WebService使用SOAP头
    使用SilverLight构建插件式应用程序(七)
    管理类软件的界面模板。
    使用SilverLight构建插件式应用程序(六)
    使用SilverLight开发ARPG游戏(一)
    AS 学习笔记 元件和代码的绑定
    scaleform 学习笔记1
    cocos2dx 获取图片的某像素点的RGBA颜色
    接触的第二个引擎 scaleform
  • 原文地址:https://www.cnblogs.com/WeiMLing/p/11271018.html
Copyright © 2011-2022 走看看