• 接口和抽象类的区别


    抽象类和接口是面向对象编程中的基本概念,类(含抽象类)、接口、数组是同一个级别的概念,都属于引用数据类型。

    相同点:

     抽象类和接口均包含抽象方法,类必须实现所有的抽象方法,否则是抽象类。

     抽象类和接口都不能实例化,它们位于继承树的顶端,用来被其他类继承和实现。

    两者的主要区别主要体现在两个方面:语法方面和设计理念方面。

    语法方面的区别是比较低层次的,非本质的,主要体现在:

    一个类的三大成员是成员变量,成员方法,构造方法。语法上的区别主要有以下三方面:

    1)成员变量:接口中只能定义全局静态常量,不能定义变量。抽象类中可以定义变量与常量。

    2)成员方法:接口中所有的方法都是全局抽象方法(JDK1.8)之前,JDK1.8之后接口中可以有非抽象方法。抽象类中可以有0个及以上,甚至全部是抽象方法。

    3)构造方法:抽象类中可以有构造方法,但是不能用来实例化,而在子类中的实例化是执行,完成属于抽象类的初始化操作。接口中不能定义构造方法。

    4)一个类只能有一个直接父类(可以是抽象类),但可以同时实现多个接口。一个类使用extends来继承抽象类,使用implements来实现接口。

    二者的主要区别还是在设计理念上,其决定了某些情况下到底使用抽象类还是接口。

    1)抽象类体现了一种继承关系,目的是复用代码。父类和子类之间必须存在“is-a”的关系,即父类和子类在概念本质上应该是相同的。

    2)接口并不要求实现类和接口在概念本质上一致,仅仅是实现了接口定义的约定或能力而已。接口定义了“做什么”,而实现类负责完成“怎么做”,体现了功能(规范)和实现分离的原则。接口和实现之间可以认为是一种“has-a”的关系。

    总的来说,接口和实现类的最大区别是设计理念不同,或者说作用不同。如:

    Bird extends Animal implements Flyable

    Plan extends Machine implements Flyable

    Dogs、News、String、Product、Date是完全不同的事物,但是都具有比较的能力,实现Comparable接口即可。

  • 相关阅读:
    B.Icebound and Sequence
    Educational Codeforces Round 65 (Rated for Div. 2) D. Bicolored RBS
    Educational Codeforces Round 65 (Rated for Div. 2) C. News Distribution
    Educational Codeforces Round 65 (Rated for Div. 2) B. Lost Numbers
    Educational Codeforces Round 65 (Rated for Div. 2) A. Telephone Number
    Codeforces Round #561 (Div. 2) C. A Tale of Two Lands
    Codeforces Round #561 (Div. 2) B. All the Vowels Please
    Codeforces Round #561 (Div. 2) A. Silent Classroom
    HDU-2119-Matrix(最大匹配)
    读书的感想!
  • 原文地址:https://www.cnblogs.com/sinoaccer/p/12057049.html
Copyright © 2020-2023  润新知