抽象类与接口

2023-05-16

抽象类与接口

接口与抽象类

一、抽象类

说起抽象类,我们先说一下如何定义一个抽象方法

abstract class Person {
    public abstract void print();
}

class Women extends Person {
    @Override
    public void print() throws RuntimeException{
        System.out.println("Women");
    }
}

Person 类的 print 方法就是抽象方法,抽象方法用 abstract 修饰,没有方法体,直接以分号结束

访问修饰符 abstract 返回值类型 方法名(参数列表);

**使用 abstract 修饰的类就是抽象类。**比如上面的 Person 就是抽象类。

**一个类如果包含一个或多个抽象方法,那么该类必须是抽象类。**如果我们尝试将 Person 类变为非抽象类,可以看到 idea 的错误提示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eDKz5Vmk-1594129396595)(https://i.loli.net/2020/07/07/wlJfnq82TcmGuhM.jpg)]

抽象类可以包含具体数据和方法,也可以不包含抽象方法。

在 Person 类定义一个 name 属性,定义一个 printName 方法在控制台打印 name 值:

在抽象类定义数据与具体方法.jpg

我们可以注释掉抽象方法 print,发现无报错:

抽象类中可以不定义抽象方法.jpg

抽象类不可以被实例化,但是抽象类可以定义对象变量,这个对象变量可以引用非抽象类的子类对象

比如,这行代码就会报错:

Person p = new Person();

Person 是抽象类,抽象类无法实例化,我们可以使用对象变量 p 来引用 Women 类(Person 子类)的对象

Person p = new Women();

二、接口

在 Java 中,接口不是类,它是规范,所有实现接口的类都必须遵守其规范。接口使用 interface 定义

interface Demo {

}

我们需要记住接口中可以有什么,不可以有什么

接口中可以定义常量,可以有方法,在 Java 8 之前,接口中的方法无法拥有具体实现,在 Java 8 可以用 default 修饰方法,就可以有具体的实现

接口中的域会被自动设置为 public static final,所有方法会被自动设置为 public。

Java 8 之前,接口无法拥有静态方法,Java 8 之后,接口可以拥有静态方法。

interface Demo {
    int A = 1;
    default void print() {
        System.out.println("这是一个接口");
    }
}

接口不是类,所以不可以被实例化,但是可以定义对象变量,对象变量可以引用这个接口的实现类的对象,实现类需要使用 implement 关键字

接口无法实例化.jpg

DemoImpl 是 Demo 的实现类,接口无法实例化,我们可以看到 idea 的报错提醒。

接口不能拥有实例域

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mK5JmcgV-1594129396605)(https://i.loli.net/2020/07/07/qB4oT6H7xAdF31b.jpg)]

三、抽象类与接口的区别与联系

  1. 抽象类是类,使用class 定义,需要有 abstract 修饰,接口是使用 interface 定义。
  2. 在 Java 中,类只能单继承。接口可以多实现。
  3. 接口中的所有方法只能是 public,所有的变量都会被设置为 public static final,所以接口只能有常量,而抽象类中没有这个限制。
  4. 接口无法拥有实例域,抽象类可以拥有实例域。
  5. 在 Java 8 之前,接口中的方法无法有具体实现,在 Java 8 后可以。而抽象类中的非抽象方法可以拥有具体实现。
  6. 在 Java 8 之前,接口中不能有静态方法,Java 8 后可以。而抽象类可以有静态方法。
  7. 抽象类和接口都不能被实例化,但可以定义对象变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

抽象类与接口 的相关文章

  • nodejs使用npm发布模块带npm报错(verbose stack Error: Invalid name: "")解决

    当我们安装好了nodejs和npm环境后 xff0c 使用npm publish 把模块发不到npm时 xff0c 包如下错误 xff1a 仔细查找问题 xff0c 发现原因是由于npm在发布时 xff0c package json中nam
  • 虚拟机安装CentOS7系统及常用工具配置

    一 准备工作 1 VMware Workstation 15虚拟机 xff1b 2 CentOS 7 x86 64 DVD 2009 iso 系统 xff1b xff08 下载地址 xff1a Download xff09 二 安装 Cen
  • ZYNQ平台UBOOT下烧录程序到Flash中

    上篇文章讲述了通过SDK引导启动UBOOT xff0c 在UBOOT启动之后可以通过网口tftp功能下载主机提供的相应程序 xff0c 并通过sf擦除和烧写命令 xff0c 将新程序烧录到Flash指定位置 uboot启动之后 xff0c
  • 近期我将51CTO的博客搬家到了CSDN的问题

    近期我把以前在51写的博客搬家到了CSDN xff0c 结果发现搬家过来后 xff0c 很多代码出现了排序错乱的问题 xff0c 这样看起来非常不好 xff0c 必须要复制到开发软件中ctrl 43 F去整理格式 xff0c 希望看到的管理
  • PCL点云库 点云拼接

    点云拼接有2种方式 xff1a 两个点云的点数相加 xff0c 和两个点云的维度相加 xff08 1 xff09 点数相加 当两个点云的维度 xff08 字段 xff09 相同时 xff0c 两个点云可以通过数学符号 34 43 34 拼接
  • 虚拟机linux能ping通主机不能上网解决办法

    首先查看你的虚拟机设置 xff0c 网络适配器是不是connect 连接 xff0c 选择连接方式第一种桥接方式 xff0c 主机ping虚拟机能ping通 xff0c 还不能上网 xff0c 测试下你的linux 看是否是这类问 题 xf
  • linux设备端breakpad程序崩溃日志的捕获与分析

    linux设备端breakpad程序崩溃日志的捕获与分析 目录 linux设备端breakpad程序崩溃日志的捕获与分析说明平台介绍breakpad 的编译PC端的编译与安装交叉编译 breakpad 的使用代码的使用需要使用的文件程序崩溃
  • [转载]槽函数教程

    一 概述 二 信号 三 槽 四 信号和槽的关联 五 元对象工具 六 程式样例 七 应注意的问题 相关资源 作者简介 作者 唐新华 xhsmart 64 263 net 软件工程师 信号和槽作为QT 的核心机制在QT 编程中有着广泛的应用 x
  • 如何在Centos服务器上搭建起Oracle10、VNC、以及FTP

    一 重装和分区 1 配置所需磁盘阵列 xff08 Raid xff09 xff1b 2 正确分区 xff1b 3 Centos安装 xff1a 过于简单 xff0c 请自行bd 二 连网 系统安装完成之后 xff0c 我们需为其分配IP和D
  • cas服务器连接数据库

    进行数据库的连接 xff0c 必须要导入一些必要的包 xff0c 比如数据库驱动 xff0c mysql连接等包 xff0c 这些maven依赖都能在网上找到 1 找到cas overlay template 5 3文件夹下的pom文件 x
  • VirtualBox 桥接模式,虚拟机ping不通宿主机

    按照网上教程设置好虚拟机网络之后 xff0c 怎么都ping不通宿主机 方案一 xff1a 修改防火墙入站规则 打开控制面板 xff0c 找到Windows Defender 防火墙 xff0c 点击高级设置 xff0c 在入站规则里找到核
  • Kuhn-Munkres 算法详细解析

    直接进入正题 xff0c Kuhn Munkres 算法 xff08 下文简称 KM 算法 xff09 是为了高效求解二分图最佳完美匹配问题而生的 xff0c 我们先温习一下几个概念 xff0c 如果你对这几个概念不是很熟悉的话 xff0c
  • maven web项目执行install异常:org.apache.maven.plugin.war.util.WebappStructure

    INFO Packaging webapp INFO ERROR FATAL ERROR INFO INFO Cannot construct org apache maven plugin war util WebappStructure
  • 配置linux主机静态ip和网关

    网上还是百度了比较多 xff0c 具体参考已经记不清楚了 xff0c 也就不写了 不过还是要感谢各位大佬之前的分享 xff0c 还有一些分享了网络知识的 xff0c 有兴趣可以自己百度去看了 这篇只大概记录需要配置哪些东西 xff0c 大概
  • adb命令 提取已安装的apk

    获取包名 通过 adb shell pm 命令 xff0c 可以打印当前手机安装的所有 apk 的包名 adb shell pm list packages 根据包名查找 APK 对应的路径 所有安装完后的apk xff0c 其实都存在手机
  • python 语言基础 - 你不得不知道的字符串常用函数之isalpha

    前言 小伙伴们大家好 xff0c 每天一个小知识 xff0c 一起学python每天进步一点点 不知道小伙伴们在开发的时候有没有遇到这样一种场景 xff0c 有时候一些业务需要 xff0c 想要判断一个字符串是不是由纯字符组成 xff0c

随机推荐

  • python 语言基础 - 你不得不知道的字符串常用函数之isdigit

    前言 小伙伴们大家好 xff0c 每天一个小知识 xff0c 一起学python每天进步一点点 上一篇文章中为大家分享了关于判断字符串是否全都是由字符组成的函数isalpha xff0c 今天要给大家分享的依然是判断字符串组成的函数isdi
  • uni-app,选择器使用

    1 uni app 选择器使用示例 xff1a let view 61 uni createSelectorQuery in this select 34 grade btn 34 view fields size true scrollO
  • CSRF漏洞修复建议

    1 关于CSRF 跨站请求伪造 xff0c xff08 Cross site request forgery xff09 是一种对网站的恶意利用 CSRF作为一种跨网站的攻击方式 xff0c 不同于XSS站内攻击 CSRF是通过伪装成受信任
  • centos6和centos7的防火墙基本命令

    一 centos6 xff1a 1 firewall的基本启动 停止 重启命令 查看防火墙状态 xff1a service iptables status etc init d iptables status centos6启动 停止防火墙
  • django中vue的使用

    转载 xff1a https blog csdn net qq 21389693 article details 105734696 后端使用vue的目的 后端使用vue的目的就是把ajax里面的数据绑定到前端 xff0c 实现动静分离 V
  • centos7更新yum源

    1 centos7安装后 xff0c 默认yum源配置文件位置 xff1a vi etc yum repos d CentOS Media repo 2 下载新的国内yum源 centos自带的是国外yum源 xff0c 下载速度相当慢 换
  • 临时出差宁波随笔

    因公司吉利项目收尾工作 xff0c 需到客户现场施工 主要负责软件项目的质量查验 xff0c 及相关问题修复 一千多公里的路程 xff0c 坐高铁7小时左右 xff0c 真是体验了中国速度 一路由西北而向东南直下 xff0c 抵达舟山群岛附
  • GitHub Copilot

    介绍 GitHub Copilot 是人工智能编程助手 xff0c 它可以帮助你编写程序 在你用visual studio或visual studio code等软件设计工具进行编程时 xff0c 它可以直接给你整行或整个方法的代码提示 x
  • 微信小程序头像昵称填写功能

    自 2022 年 10 月 25 日 24 时后 xff08 以下统称 生效期 xff09 xff0c 用户头像昵称获取规则将进行如下调整 xff1a 自生效期起 xff0c 小程序 wx getUserProfile 接口将被收回 xff
  • mysql 5.7设置数据库大小写敏感

    1 此处讲的是windows环境下的mysql配置 xff0c 小编用的是win10系统 xff1b 2 安装完mysql后 xff0c 数据库默认是大小写不敏感的 xff1b 3 修改my ini文件 xff1a C ProgramDat
  • eclipse 护眼色设置

    1 调整eclipse editor区域背景色 背景颜色向你推荐 xff1a 色调 xff1a 85 饱和度 xff1a 1 2 3 亮度 xff1a 2 0 5 文档都不再是刺眼的白底黑字 xff0c 而是非常柔和的豆沙绿色 xff0c
  • Js apply方法详解,及其apply()方法的妙用

    Js apply方法详解 我在一开始看到javascript的函数apply和call时 非常的模糊 看也看不懂 最近在网上看到一些文章对apply方法和call的一些示例 总算是看的有点眉目了 在这里我做如下笔记 希望和大家分享 如有什么
  • 如何安装双系统之ubuntu安装

    如何安装双系统之ubuntu安装 1 首先在Windows下对磁盘分出一块空闲分区大概100G左右 2 然后下载Ubuntu16 04镜像 xff0c 制作启动盘 3 重启电脑 xff0c 按住对应的键 xff08 不同电脑型号可能不同 x
  • 场景分类综述——Remote Sensing Image Scene Classification Meets Deep Learning

    一 场景分类面临的挑战 场景分类的挑战包括 xff1a 1 类内多样性大 xff0c 2 类间相似性高 也称为类间可分性低 xff0c 3 对象 场景尺度的差异大 就类内的多样性而言 xff0c 挑战主要来自于在同一个语义类中出现的地物的巨
  • 配置服务器的磁盘阵列并正确分区

    磁盘阵列 xff0c 即独立磁盘冗余阵列RAID xff08 Redundant Array of Independent Disks xff09 xff0c 其实就是一个将多块独立磁盘结合在一起 xff0c 从而提高数据的可靠性和I O性
  • 软件项目组织架构安排

    这个主题涉及到三个方面 xff0c 项目计划管理 组织管理和技术管理范畴 项目计划管理是项目管理中的一个大篇章 xff0c 包括时间计划 成本计划 费用计划等在内的各类计划管理 xff0c 不是本文章所谈的范围 xff0c 只是本文主题涉及
  • SpringBoot2.x学习(二):为属性注入配置文件中的值:@ConfigurationProperties注解的使用

    文章目录 一 64 ConfigurationProperties 简单介绍二 64 ConfigurationProperties 使用示范1 创建两个 javaBean2 在 SpringBoot 全局配置文件写入需要注入的值2 1 a
  • SpringBoot 2.x学习(三):为属性注入配置文件中的值:@Value 注解的使用

    文章目录 一 64 Value 注解的作用二 使用 64 Value 为普通成员变量注入值1 字面量 xff08 1 xff09 语法 xff08 2 xff09 举例 2 Spring 表达式 xff08 SpEL xff09 xff08
  • 数据结构与算法学习(一):线性表之数组的插入与删除(Java 实现)

    文章目录 一 数组介绍1 线性表2 连续的内存空间和类型相同的数据 二 利用数组实现插入操作及相应的时间复杂度分析1 数组原本有顺序 xff0c 插入后需要继续保持数组有序 xff08 1 xff09 思路分析 xff08 2 xff09
  • 抽象类与接口

    抽象类与接口 接口与抽象类 一 抽象类 说起抽象类 xff0c 我们先说一下如何定义一个抽象方法 span class token keyword abstract span span class token keyword class s