Java面试:接口(Interface)与抽象类(Abstract Class)的区别?

2023-05-16

什么是抽象类?

包含抽象方法的类,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

抽象类的作用?

用于拓展对象的行为功能,一个抽象类可以有任意个可能的具体实现方式。

抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:

[public] abstract class ClassName {
    abstract void fun();
}

  包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:

  1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

  2)抽象类不能用来创建对象;

  3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

  在其他方面,抽象类和普通的类并没有区别。

什么是接口?

指供别人调用的方法或者函数,是对行为的抽象。在Java中,定一个接口的形式如下:

[public] interface InterfaceName {
}

接口中的变量会被隐式地指定为public static final变量,方法会被隐式地指定为public abstract方法,并且接口中所有的方法不能有具体的实现。接口比抽象类更加“抽象”。

class ClassName implements Interface1,Interface2,[....]{
}

抽象类和接口的区别

1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;

2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

5)继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。

interface Alram {
    void alarm();
}
 
abstract class Door {
    void open();
    void close();
}
 
class AlarmDoor extends Door implements Alarm {
    void oepn() {
      //....
    }
    void close() {
      //....
    }
    void alarm() {
      //....
    }
}

 Door的open() 、close()和alarm()根本就属于两个不同范畴内的行为,open()和close()属于门本身固有的行为特性,而alarm()属于延伸的附加行为。因此最好的解决办法是单独将报警设计为一个接口,包含alarm()行为,Door设计为单独的一个抽象类,包含open和close两种行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java面试:接口(Interface)与抽象类(Abstract Class)的区别? 的相关文章

随机推荐

  • Qt下C++的cout输出中文信息乱码问题解决

    在Qt中使用C 43 43 的cout时 xff0c 发现打印出的中文时乱码的 xff0c 如下 xff1a 解决办法 xff1a 第一步 xff1a 加入头文件 61 61 include lt windows h gt 61 61 解决
  • C51单片机学习笔记(六)——液晶显示屏的使用

    C51单片机学习笔记 六 液晶显示屏的使用 文章目录 C51单片机学习笔记 六 液晶显示屏的使用1 LCD1602的认识2 LCD1602的引脚及其功能3 LCD模块的内部结构4 LCD1602的工作时序5 LCD1602的指令说明6 LC
  • ubuntu20.04中安装ROS系统,详细介绍各种错误解决方法,直达小海龟

    因为最近学习的缘故 xff0c 花了半天的时间安装了ROS xff0c 期间因为ubuntu也是临时安装的双系统 xff0c 遇到了各种各样的问题 xff0c 这里记录一下 xff0c 主要集中在ROS系统安装问题的解决 Ubuntu系统的
  • ELK---Python实现Mysql数据导入到ES,及Geoip数据类型写入

    使用环境 Python3 6 准备Py包 elasticsearch geoip2 pymysql 下面上代码 1 导入必要的模块 encoding utf 8 from elasticsearch import Elasticsearch
  • Django日志logging的配置和自定义添加

    Django日志logging的配置和自定义添加
  • 算法笔记:KM算法(Kuhn-Munkres Algorithm)

    带权二分图的最优匹配问题 算法笔记 xff1a 匈牙利算法 UQI LIUWJ的博客 CSDN博客 匈牙利算法的一个问题是 xff0c 找到的匹配不一定是最优匹配 因为算法将每个匹配对象的地位视为相同的 xff0c 在这个前提下求解最大匹配
  • 2 anchor-base和anchor_free两者的优缺点

    anchor base和anchor free两者的优缺点 anchor base和anchor free两者的优缺点 一 什么是anchor二 anchor base和anchor free的区别三 anchor free和single
  • 面试题测试

    1 如何在springboot启动时 xff0c 获取 data 目录下的所有文件名 您可以使用Java的File类来获取指定目录下的所有文件名 以下是一种在Spring Boot应用程序启动时获取指定目录下所有文件名的方法 xff1a 在
  • Ubuntu16.04安装caffe非常细致教程(历经两周的血泪史)

    我这两周安装了很多次caffe xff0c 一直都是按照网上的教程 xff0c 资料很多 xff0c 但是说的感觉都不太全面 xff0c 对于我这一个首次接触Ubuntu系统的小白而言 xff0c 每一步操作都是感觉如临深渊 所以想写一篇教
  • 源码安装gcc

    安装 contrib download prerequisites configure prefix 61 usr local gcc enable bootstrap enable checking 61 release enable l
  • 数据库详细思维导图,期末考试、复试必备

    数据库 一 xff1a 数据库绪论数据 xff08 Data xff09 数据库 xff08 Database xff0c 简称DB xff09 数据库管理系统 xff08 DBMS xff09 数据冗余度 xff1a 数据的安全性 xff
  • 目标检测中删除不一致的xml和jpg文件

    34 34 34 删除image和xml不对应的文件 34 34 34 import os import shutil file name 1 61 r 34 10 11Image img 34 图片文件存放地址 file name 2 6
  • 使用cas-overlay-template 6.2服务部署到整合cas-client

    1 什么sso是单点登录 单点登录 xff08 Single Sign On xff09 xff0c 简称为 SSO xff0c 是比较流行的企业业务整合的解决方案之一 SSO的定义是在多个应用系统中 xff0c 用户只需要登录一次就可以访
  • 单例模式-双重锁

    public class Singleton private static volatile Singleton singleton volatile 相当于防止下面两个 61 61 null 判断不被打乱 private Singleto
  • 基于STM32的12864液晶理解

    前言 字符型液晶显示模块是一种专门用于显示字母 数字 符号等点阵式 LCD xff0c 目前常用 161 xff0c 162 xff0c 202 和 402 行等的模块 上面指的是以字符为单位 xff0c 如161 xff0c 也就是1行1
  • Django rest-framework类视图大全

    视图分类 视图类 GenericAPIView xff1a 包含两大视图类 xff08 APIView GenericAPIView xff09 视图工具类 mixins xff1a 包含五大工具类 xff0c 六大工具方法工具视图类 ge
  • JS中? ?和??=和?.和 ||的区别

    undefined和null是两个比较特殊的数据类型 是不能用点操作符去访问属性的 xff0c 否则将会报错 let a console log a name undefined console log a name 报错 let obj
  • 几款好用的串口和网络调试助手

    和嵌入式厮混在一起总得用几个趁手的调试助手 xff0c 这里介绍几个用过的串口和网络调试助手 xff0c 各有千秋 这也只是我自己使用过的 xff0c 如果又更好 xff0c 也请大家分享一下 xff1a 1 丁丁串口调试助手 这是我最常用
  • 软件设计工程——结构化分析与设计

    结构化分析方法 数据流图 便于用户理解 分析系统数据流程的图形工具 基本图形元素 数据流 xff1a 由固定成分的数据组成 xff0c 表示数据的流向 xff1b 加工 xff1a 描述输入数据流到输出数据流之间的变换 xff1b 数据存储
  • Java面试:接口(Interface)与抽象类(Abstract Class)的区别?

    什么是抽象类 xff1f 包含抽象方法的类 xff0c 是对一系列看上去不同 xff0c 但是本质上相同的具体概念的抽象 抽象类的作用 xff1f 用于拓展对象的行为功能 xff0c 一个抽象类可以有任意个可能的具体实现方式 抽象方法是一种