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

    这一定是面试的热门问题!

    但我不仅为这个。之前学习C#面试题,遇到过这个问题;现在学习java,也遇到这个问题,因此想总结一下。

    抽象类和接口都有制定规范方法,强制子类实现的一面,很多时候,作为一个抽象父类,它们是共通的,既可以用抽象类,也可以用接口。

    但不同的地方还是有很多:

    1、抽象类是一个类,里面除了有抽象方法,还可以有成员变量,属性,成员函数,但接口只有待实现的方法

    2、子类不一定要实现抽象类的方法,它可以原封不动地将这个方法继承下来,这时候,子类也是一个抽象类;但继承接口的子类,一定要将接口的方法实现。当然,接口也可以继承别的接口,对接口而言,是无须,也不能实现方法体的。

    3、抽象类的抽象方法,不一定是public的;但接口的方法,子类实现的时候,一定要是public

    4、总的看来,抽象类要比接口强大,但一个子类只能继承一个抽象类(呵呵,岂止抽象类,子类只能继承一个类而已),但可以继承多个接口

    5、……

    但究其实,抽象类和接口是两样不同概念的东西,它们有着本质的区别:

    抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性;

    接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性;

    分析对象,提炼内部共性形成抽象类,用以表示对象本质,即“是什么”

    为外部提供调用或功能需要扩充时优先使用接口

    (以上抄自互联网)

    简单来说,抽象类表述的是本质,即“是什么”;接口表述的是功能,即“会什么”,或“能做什么”

    我的理解:

    孙悟空本质上是一个猴子,但它学会了许多本领,神通广大,成为齐天大圣。

    用面向对象语言,可以这么表述:

    孙悟空实现了猴子的抽象类,同时继承了一系列接口:

    筋斗云,72般变化,分毫法,火眼金睛


  • 相关阅读:
    单例模式
    HashSet、LinkedHashSet、SortedSet、TreeSet
    ArrayList、LinkedList、CopyOnWriteArrayList
    HashMap、Hashtable、LinkedHashMap
    andrew ng machine learning week8 非监督学习
    andrew ng machine learning week7 支持向量机
    andrew ng machine learning week6 机器学习算法理论
    andrew ng machine learning week5 神经网络
    andrew ng machine learning week4 神经网络
    vue组件监听属性变化watch方法报[Vue warn]: Method "watch" has type "object" in the component definition. Did you reference the function correctly?
  • 原文地址:https://www.cnblogs.com/leftfist/p/4257875.html
Copyright © 2011-2022 走看看