美文网首页
接口与抽象类的区别

接口与抽象类的区别

作者: WalkerDenial | 来源:发表于2020-12-14 23:45 被阅读0次

    OOP 中,核心是 封装继承多态,而在 继承 中,常常关联的是 接口抽象类,经常用倒是不假,但是使用语言组织描述一下,有可能就会卡壳,而这些是基础,基础的掌握程度决定了大厦的高度,因此,经常重新梳理一下 封装 中常用的 接口抽象类

    老规矩,想学什么东西,第一件事就是要了解 是什么,如果概念不清,就相当于开车路线不清楚,在路上瞎开,有时候,不一定能开到期望的终点。

    1. 基础概念

    1.1 接口

    接口(英语:Interface),在Java编程语言中是一个抽象类型(Abstract Type),它被用来要求类(Class) 必须实现指定的方法,使不同类的对象可以利用相同的界面进行沟通。接口通常以 interface 来宣告,它仅能包含方法签名(Method Signature)以及常量宣告(变量宣告包含了 static 及 final),一个接口不会包含方法的实现(仅有定义)。

    接口 的特点:

    1. 接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须宣告为抽象类(Abstract Class)
    2. 在Java中,接口类型可用来宣告一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象
    3. 其中一个使用接口的优势是,可以利用他们模拟多重继承,类在JAVA中不允许多重继承,所有在JAVA中的类必须而且仅能有一个父类,而java.lang.Object(JAVA类型系统中最顶层的类型)是唯一一个例外
    4. JAVA的类可以被实现许多个接口,然而一个接口则无法实现其他的接口

    知道 接口 是什么,以及其特点以后,我们能用 接口 做什么呢?

    开发中,可以使用 接口 用来统一类的共通行为,当不同的类需要进行信息共享时,是不需要特别去创建类间的关系。

    举个 🌰:

    一个人(Human)及一只鹦鹉(Parrot)都会吹口哨(whistle),然而 Human 及 Parrot 不应该为 Whistler 的子类,最好的做法是令他们为 Animal 的子类,而他们可以使用 Whistler 的接口进行沟通。其中 Whistler 就可以是一个 接口 ,规约了 whistle 功能。

    1.2 抽象类

    介绍 抽象 类之前,先简单介绍下 不抽象

    类(英语:class)在面向对象编程中是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的属性和方法。

    类的更严格的定义是由某种特定的元数据所组成的内聚的包。它描述了一些对象的行为规则,而这些对象就被称为该类的实例。

    简单来讲, 就是对 属性方法 的封装。使用伪码举个 🌰 :

    class 人 {
        属性:身高
        属性:性别
        属性:肤色
        
        方法:学习() {
            输出:比如正在看这篇文章的你正在学习
        }
        
        方法:跑步() {
        }
        
        // ...
    }
    

    结合上面简单的伪码,就能简单的理解 了,你可以尝试举一反三。

    接下来,进入正题,介绍介绍 抽象类

    抽象类:被定义为永远不会也不能被实例化为具体的对象。它往往用于定义一种抽象上的概念,在类的继承关系中它往往被定义在较上层的位置。

    敲黑板!敲黑板!敲黑板!

    永远不会也不能被实例化为具体的对象,这是重点,圈起来要考。

    既然不能被实例化,那么它的作用是什么呢,请往后看:定义一种抽象上的概念,这就是 抽象类 的核心目的。是一个 概念,而不是具体的实现。

    2. 抽象类接口 对比分析

    相同点 不同点
    接口 1. 对共同的属性进行规约;
    2. 对共同的方法进行规约;
    3. 是不完整的类;
    4. 接口可以看做是一个特殊的抽象类;
    不能包含对共同方法和属性的提供实现
    抽象类 同上 可以规约一个共同的方法和属性时提供一个对他们的实现

    最后,再次送上一个 🌰:“水果”可以算作一个抽象类,而“苹果”、“香蕉”则可以作为它的派生类。区别在于,“水果”是个概念,它不会有实例,但是“苹果”、“香蕉”则肯定会有实例。

    相关文章

      网友评论

          本文标题:接口与抽象类的区别

          本文链接:https://www.haomeiwen.com/subject/cfkigktx.html