zoukankan      html  css  js  c++  java
  • 抽象类与接口

        虽说在Java中接触过抽象类和接口的概念,这次C#学习中再次接触时,仍然觉得挺别扭的。这是两个很爱混淆的概念,可能很多人都存在着疑问,这两个概念是不是可以被相互替代,存在的意义是什么?该如何区分?我也存在相同的问题,感觉很糊涂,因此查了一些资料。这是我的一点看法:

        一、抽象类

        不象具体类那样描述一类具体事物。在现实世界存在许多抽象的东西,如刮风下雨、季节变化等,甚至是一些抽象的概念。
        例如将哺乳动物作为一个抽象类,老虎类、猩猩类都是哺乳动物类的子类。老虎类作为一个具体的类可以实现哺乳动物类的所有抽象方法。但却不能用哺乳动物类来实例化为一个具体的事物。

        二、接口

        接口是不相关的对象之间进行相互交互的设备。在程序设计中,往往也希望类隐藏其处理的特定事物的细节,对外界仅公布它必须支持的属性。接口机制提供了实现这种方式的途径。接口同样不可以实例化为具体的事物。

        由此可见,抽象类和接口都不能对其进行实例化操作,且在派生类中必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员。

        那么这二者为何不能相互代替,如何区分呢?我认为最重要抓住两点:
        1。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类);
        2。接口中声明的所有方法都必须且只能在派生类中实现,但抽象类中可以定义自己的方法,只有其中声明的抽象方法才必须在派生类中实现。
        我想抓住这两点,很多情况下我们就可以区分该选择抽象类还是接口来实现了。

  • 相关阅读:
    POJ 3660 Cow Contest 任意两点之间的关系 Floyd
    CDOJ 1146 A
    TTTTTTTTTTTTTT CDOJ Sliding Window 线段树(nlogn)或双端队列(n) 模板
    CDOJ 203 并查集+优先队列 好题
    CDOJ 1073 线段树 单点更新+区间查询 水题
    CDOJ 1070 秋实大哥打游戏 带权并查集
    CDOJ 1063 堆排序模板
    CDOJ 1069 秋实大哥去打工 单调栈 下标处理
    CDOJ 1061 C
    巨蟒python全栈开发django14:Form组件
  • 原文地址:https://www.cnblogs.com/chenghao/p/1272523.html
Copyright © 2011-2022 走看看