接口与抽象类的区别

2020-12-14  本文已影响0人  WalkerDenial

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. 接口可以看做是一个特殊的抽象类;
不能包含对共同方法和属性的提供实现
抽象类 同上 可以规约一个共同的方法和属性时提供一个对他们的实现

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

上一篇下一篇

猜你喜欢

热点阅读