【Java】抽象类与接口

文章目录

  • 1.抽象类
    • 1.1抽象方法
  • 2.接口
  • 3.抽象类和接口的区别
    • 3.1代码中区分:
    • 3.2设计层面区分

  在面向对象编程中,抽象是非常重要的一个特征。在Java中可以通过抽象类或接口的形式实现这一特性。

1.抽象类

Java关键字 abstract对应抽象类的使用

1.1抽象方法

  在Java中有一种方法,没有具体实现只有声明,这就是抽象方法。

abstract void test();

一个类只要有一个抽象方法,那么这个类必须用abstract关键字修饰,即这个类为抽象类。
在这里插入图片描述

创建一个动物的抽象类,拥有一个eat的抽象方法

public abstract class Animal {
    abstract void eat();
}

因为抽象方法没有实现,所以抽象类便是为了继承而产生的。通过子类继承该抽象类,重写实现抽象类的方法。抽象方法不能是private类型,因为子类无法重写,默认为public类型。

public class Cat extends Animal{
    @Override
    void eat() {
        System.out.println("cat eat");
    }
}

猫继承动物这个抽象类,所以可以重写eat这个抽象方法,但是需要注意,一定要重写父类所有的抽象方法,否则会报错。如果子类不想实现抽象方法,那么子类也必须是抽象类,即抽象类继承抽象类。

public abstract class Animal {

    public Integer age;
    
    abstract void eat();
    
    public void sleep(){
        System.out.println("sleep");
    }
}

抽象类并不是只能有抽象方法,同样可以拥有普通方法和成员变量

在这里插入图片描述
抽象类并不能被实例化,只能实例化他的子类。

2.接口

  接口通常是提供别人调用的方法或者函数,Java关键字 interface对应接口的定义,实现接口使用implement关键字。

  在接口中的抽象方法,会被隐式的指定为public abstract类型。同样的,接口也可以拥有成员变量,但同样会被隐式指定为public static final类型,使用其余关键字修饰会报错。
在这里插入图片描述
  接口可以感觉比抽象类更抽象的存在,并且接口不支持方法的实现,只能声明方法。

3.抽象类和接口的区别

3.1代码中区分:

  1. 抽象类中可以实现方法,并且允许非抽象方法存在,允许不同关键字修饰方法;接口中只能有public abstract 修饰的抽象方法,并且只有声明,没有实现。
  2. 抽象类中的成员变量可以有不同关键字修饰,但接口中的成员变量只允许public static final关键字修饰。
  3. 如果是非抽象类实现接口,那么需要重写接口的所有方法,如果是抽象类实现接口,那么可以不需要重写,类似于抽象类继承抽象类不一定要重写所有抽象方法。
  4. 抽象类允许静态方法和代码块,接口不允许静态方法和代码块。
  5. 类只能继承一个抽象类,但可以实现多个接口。

3.2设计层面区分

抽象类是对整体事物进行抽象,接口是对局部行为抽象。具体一点就相当于飞机和鸟可以分别抽象为两个抽象类类,而飞行不能是一个类,但是可以设计为一个飞行接口,然后鸟类和飞机类用不同的方式实现飞行这个接口。不同的鸟和飞机分别继承对应的抽象类,可以飞行的实现飞行接口,不能的则不实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/19758.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Calico的BGP打通Kubernetes网络和局域网

1、项目背景 随着云原生技术的不断发展,容器化应用已成为企业构建云原生架构的重要方式。而随着集群规模不断扩大,跨主机通信的需求也越来越重要。在 Kubernetes 集群中,Pod 是最小的调度和管理单位,而网络也是 Kubernetes 中最重…

二叉树OJ

文章目录 二叉树OJ根据二叉树创建字符串思路示例代码 二叉树的层序遍历思路示例代码 二叉树的层序遍历 II思路示例代码 二叉树的最近公共祖先思路1示例代码1思路2示例代码2 二叉搜索树与双向链表思路1示例代码1思路2示例代码2 迭代实现二叉树的三种遍历前序遍历思路示例代码 中…

哪些蓝牙耳机戴久不疼?长时间佩戴不疼的蓝牙耳机推荐

现在的真无线耳机已经成为了人们的标配之一了,各个厂家也紧随其后,生产出了多种无线耳机,不少人的选购蓝牙耳机一般都是对音质、佩戴和连接,但通常人们佩戴蓝牙耳机都是在半天左右,小编专门整理了一期舒适度高的耳机&a…

ElasticSeach 集成 springboot

声明是ElasticSearch? ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎, 基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是 当前流行的企业级搜索引擎…

Unity 坐标系

一、左手坐标系与右手坐标系 常见的三维软件都采用笛卡尔坐标系,也就是常见的xyz轴坐标系。笛卡尔坐标系可以是左手坐标系也可以是右手坐标系,如下图所示 两种坐标系是镜像对称的。而Unity采用左手系,且xyz轴的默认方向与图中的左手系完全一…

便携式车用CAN分析仪

产品简介 USBCAN-C系列便携式车用CAN分析仪,通过USB接口快速扩展一路CAN通道,使接入CAN网络非常容易,它具有一体式和小巧紧凑的外形,特别适合于随身携带。CAN接口采用金升阳电源模块和信号隔离芯片实现2500V DC电气隔离&#xff0…

KVM存储池管理与磁盘格式

KVM存储池管理与磁盘格式 KVM必须配置一个目录作为存储磁盘镜像(存储卷)的目录,我们称这个目录为存储池 存储池管理 默认存储池 /var/lib/libvirt/images/ 创建基于文件夹的存储池(目录) mkdir -p /data/vmfs定义…

WhatsApp如何让客户参与变得更简单?

WhatsApp对你的品牌来说可能和Twitter和Facebook一样重要,你可能已经把它们纳入你的社交媒体战略。 是的,WhatsApp不仅仅可以用来给同事发短信或与远方的亲戚视频聊天,它也适用于商业。 在发展WhatsApp业务时,小企业主得到了最优…

【网络】Socket编程-UDP篇

文章目录 预备知识源IP地址和目的IP地址源MAC地址和目的MAC地址源端口号和目的端口号"端口号port" 和 "进程ID"认识TCP/UDP协议网络字节序 Socket编程sockaddr结构API接口 简单的UDP网络程序服务器server服务端创建套接字:socket函数**socket的底层原理** …

Unity学习笔记 关于Unity相机的FOV以及水平FOV和垂直FOV之间的转换

前言 关于FOV FOV 是在任何给定时间通过人眼、相机取景器或在显示屏上可见的可观察世界的范围。它指的是整个区域的覆盖范围,而不是单个固定焦点。FOV 还描述了一个人可以看到可见世界的角度。 FOV 越宽,可以看到的可观察世界就越多。它是水平、垂直和对…

使用 OpenCV 进行基于 ESP32 CAM 的目标检测和识别

概述:基于 ESP32 CAM 的目标检测和识别 本教程介绍了使用OpenCV基于 ESP32 CAM的目标检测和识别主题。OpenCV 是一个开源的图像处理库,不仅在工业界而且在研发领域都得到了非常广泛的应用。 这里对于对象检测,我们使用了cvlib 库。该库使用 COCO 数据集上的预训练 AI 模型…

JSON-框架的具体使用

JSON-框架的具体使用 非 SpringBoot 项目 Jackson Jackson 是另一个流行的JSON序列化和反序列化库,具有以下特点 速度快:Jackson 采用了高效的JSON解析算法和字节码生成技术,使得其序列化和反序列化速度非常快。支持全类型序列化&#xff1…

4年外包终于上岸,我只能说别去....

我大学学的是计算机专业,毕业的时候,对于找工作比较迷茫,也不知道当时怎么想的,一头就扎进了一家外包公司,一干就是4年。现在终于跳槽到了互联网公司了,我想说的是,但凡有点机会,千万…

C语言-【移位操作符详解】

这篇文章主要介绍了C语言中移位操作符,文章中通过详细的代码以及有关计算机中零碎的知识点对移位操作符进行了一个更好的解释,需要的小伙伴们可以一起学习学习吖~ 移位操作符:移动的是补码的二进制序列。 在C语言当中,有两种移位…

「OceanBase 4.1 体验」|OCP Express

文章目录 一、简介二、特性介绍2.1 数据库管理2.2 数据库可观测性 一、简介 OCP Express 是一个基于 Web 的 OceanBase 4.x 轻量化管理工具,作为 OceanBase 数据库的工具组件,它集成在 OceanBase 数据库集群中,支持数据库集群关键性能指标查看…

一个月内面了30家公司,薪资从18K变成28K,真行啊····

工作3年,换了好几份工作(行业流行性大),每次工作都是裸辞。朋友都觉得不可思议。因为我一直对自己很有信心,而且特别不喜欢请假面试,对自己负责也对公司负责。 但是这次没想到市场环境非常不好,…

一文搞懂Go错误链

0. Go错误处理简要回顾 Go是一种非常强调错误处理的编程语言。在Go中,错误被表示为实现了error接口的类型的值,error接口只有一个方法: type error interface {Error() string } 这个接口的引入使得Go程序可以以一致和符合惯用法的方式进行错…

【SpringCloud01】

SpringCloud01 1.认识微服务1.0.学习目标1.1.单体架构1.2.分布式架构1.3.微服务1.4.SpringCloud1.5.总结 2.服务拆分和远程调用2.1.服务拆分原则2.2.服务拆分示例2.2.1.导入Sql语句2.2.2.导入demo工程 2.3.实现远程调用案例2.3.1.案例需求:2.3.2.注册RestTemplate2.…

Java学习笔记 --- Stream流

一、体验Stream流【理解】 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张"开头的集合中的长度为3的元素存储到一个新的集合 遍历上一步得到的集合 …

使用edge浏览器,白嫖ChatGPT的保姆级教程来了

前言 嗨,大家好,我是希留,一个被迫致力于全栈开发的老菜鸟。 人工智能大浪潮已经来临,对于ChatGPT,我觉得任何一个玩互联网的人,都应该重视起来,用起来。但是国内使用需要解决科学上网、注册、…