java抽象类和接口区别

2023-11-11

java抽象类和接口区别

        这里需要谈到抽象类和Interface的差别,abstract class和interface是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力,两者的区别如下:


(1)相同点
A,两者都是抽象类,都不能实例化。
B,interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

(2)不同点
A,interface实现,要用implements,而abstract class的实现,要用extends。
B,一个类可以实现多个interface,但一个类只能继承一个abstract class。
C,interface强调特定功能的实现,而abstract class强调所属关系。
D,尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),必须要实现。而abstract class的子类可以有选择地实现。
       抽象类的这个选择有两点含义:一是Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrct class中必须定义方法体。二是abstract class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。

E,interface是完全抽象的,只能声明方法,而且只能声明pulic的方法,不能声明private及protected的方法,不能定义方法体,也不能声明实例变量。


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

java抽象类和接口区别 的相关文章

随机推荐

  • pycharm mysql 安装_pycharm安装mysql驱动包

    新的环境配置pycharm的项目时 发现pycharm不能连接到mysql数据库 由于安了java环境但是还没配置相关的库 并且jetbrains家的IDE一般都是java写的 于是猜想可能是java缺少mysql的驱动 1 先确保pyth
  • c++学习:2.变量声明和定义的关系

    为了支持分离式编译 c 语言将声明和定义区分开来 声明只有名字并无实体 定义创建于声明名字相关的实体 因此声明和定义最重要的区别 声明不申请存储空间 定义申请存储空间 变量能且只能被定义一次 但是可以被多次声明 注意这里说的变量定义和变量赋
  • Pytorch 自己搭建的一个神经网络

    目录 数据集 dogs Vs Cats import time import torch nn as nn import torch optim from torch autograd import Variable from torch
  • 数学建模之圈养湖羊的空间利用率

    数学建模之圈养湖羊的空间利用率 D题最新最全思路已出 欢迎后台私信咨询 1 问题 规模化的圈养养殖场通常根据牲畜的性别和生长阶段分群饲养 适应不同种类 不同阶段的牲畜对空间的不同要求 以保障牲畜安全和健康 与此同时 也要尽量减少空间闲置所造
  • 使用 Redis 统计在线用户人数

    在构建应用的时候 我们经常需要对用户的一举一动进行记录 而其中一个比较重要的操作 就是对在线的用户进行记录 本文将介绍四种使用 Redis 对在线用户进行记录的方案 这些方案虽然都可以对在线用户的数量进行统计 但每个方案都有一些自己特有的操
  • QT 学习笔记(十)

    文章目录 一 绘图 1 理论知识储备 2 画背景图 3 简单绘图 4 手动刷新窗口 二 绘图实现代码 1 主窗口头文件 widget h 2 主窗口头文件 widget cpp 由于每次代码都是在原有程序上修改 因此除了新建项目 不然一般会
  • java.net.BindException: Address already in use: bind

    报这个错误说明程序的端口被占用了 在windows server服务器下可以采取如下解决方案 查看日志报错 java net BindException Address already in use bind 查看程序使用的端口 发现por
  • seata多版本下载地址以及docker安装docker

    seata多版本下载地址https sourceforge net projects seata mirror docker安装seata youngyajun 博客园1 官方指南 地址 SEATA官方部署指南 可以根据自己情况配置安装 下
  • Mybatis一对多查询无法返回数组形式的整合信息

    在进行Mybatis一对多查询练习的时候 发现控制台打印的返回值只有一条数据 并没有想要的整合的数据形式 通过查找问题所在 发现问题原来是因为在配置
  • QT-基础控件

    目录 1 三态按钮的实现 2 普通按钮的下拉框 3 复选框 4 单选按钮 5 工具栏按钮 6 文本标签 7 编辑框 8 进度条 9 组合框 10 按钮对话框 1 三态按钮的实现 实现目标 按钮的三种状态 按下 释放 进入 切换不同的相似图片
  • 如何实现JWT自动续期?

    jwt token自动续期的实现原理如下 1 登录成功后将用户生成的 jwt token 作为key value存储到cache缓存里面 这时候key value值一样 将缓存有效期设置为 token有效时间的2倍 2 当该用户再次请求时
  • ubuntu系统下Hyperledger Fabric安装配置指南

    准备条件 1 安装go 我的版本是1 17 2 安装docker和docker compose 版本尽量高一点 apt install docker io apt install docker compose 3 安装git curl ap
  • bat 将指令执行结果赋给变量

    linux shell脚本将指令执行结果赋值给变量很容易 比如 bin bash file name ls wc l echo file name file list ls l awk print 1 NF echo file list 很
  • 夜深人静写算法(二十二)- 最小编辑距离

    文章目录 一 前言 二 最小编辑距离的定义 1 莱文斯坦距离 2 达梅劳 莱文斯坦距离 3 LCS 距离 4 汉明距离 三 最小编辑距离的求解 1 设计状态 1 插入 2 删除 3 替换 4 边界处理 2 状态转移方程 3 时间复杂度分析
  • 安装grub到U盘分区,实现多系统引导

    安装grub到U盘分区 实现多系统引导 目录 1 分区工具及分区类型 1 1 显示分区表和分区信息 1 1 1 fdisk l 1 1 2 gdisk l 1 1 3 parted l 1 2 常见分区类型 1 3 分区样例 1 3 1 B
  • Kubernetes滚动更新介绍及使用-minReadySeconds

    滚动升级Deployment 现在我们将刚刚保存的yaml文件中的nginx镜像修改为 nginx 1 13 3 然后在spec下面添加滚动升级策略 1
  • 使用递归调用实现N的阶乘

    递归的定义 程序调用自身的编程技巧称为递归 recursion 递归做为一种算法在程序设计语言中广泛应用 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法 它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求
  • 设计模式--facade外观模式 VS Mediator 模式

    facade模式 为一组具有复杂且全面的接口对象提供一个简单且特定的接口 例如 图1中的DB类 该类为java sql包中复杂且全面的接口类提供了一个非常简单的 特定于ProductData的接口 图1 facade模式 是以明显且受限的方
  • Java的OOP(面向对象编程)总结,有这一篇足矣

    前言 OOP是Java语言中重要组成部分 其中面向对象编程是Java中核心编程思想 今天就将OOP知识进行总结 目录 一 思维导图 二 面对对象 1 首先要了解面对对象是什么 2 具体说法 3 面对对象三大基本特征 三 对象与类 1 对象
  • java抽象类和接口区别

    java抽象类和接口区别 这里需要谈到抽象类和Interface的差别 abstract class和interface是支持抽象类定义的两种机制 正是由于这两种机制的存在 才赋予了Java强大的面向对象能力 两者的区别如下 1 相同点 A