【JAVA SE】抽象类和接口

✨✨欢迎大家来到Celia的博客✨✨

🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉

所属专栏:JAVA

个人主页:Celia's blog~

目录

 引言

一、抽象类

1.1 抽象类的定义

 1.2 抽象方法

 1.3 抽象类的特性

1.4 抽象类的使用

 1.5 抽象类的作用

二、接口(interface、implements)

2.1 接口的定义

2.2 接口的特性

2.3 接口的使用

三、抽象类和接口的区别


 

 引言

  在面向对象的概念中,类是用来详细描述一个对象的,但若是一个类没办法完全的描述一个对象的时候,我们通常会把这个类设置成抽象的,也就是抽象类。

一、抽象类

1.1 抽象类的定义

  声明一个抽象类:

abstract class Animal{
//关键字        类名}

我们用abstract关键字来声明一个抽象类,在这里有一些注意事项:

  1. 抽象类只能被继承,无法直接实例化对象。
  2. 抽象类中可以包含字段、方法、抽象方法 。
  3. 除以上外,抽象类的使用方法与其他类并无区别

 1.2 抽象方法

  抽象方法是没有具体实现过程的一个方法声明,由继承了抽象类的子类实现(方法重写)。现在我们在抽象类中声明一个抽象方法:

abstract class Animal{public abstract void eat();
// 修饰符   关键字                
}

 1.3 抽象类的特性

  • 如果一个抽象类中有抽象方法,一个子类继承了抽象类,如若不重新实现该抽象类中的抽象方法,该子类必须也是抽象的。
  • 如果普通类继承了抽象类,这个普通类必须实现该抽象类以及其子类的所有抽象方法。
  • 抽象类里可以没有抽象方法,但若是想要声明抽象方法,必须在抽象类里实现。
  • 抽象类中可以有构造方法,待到子类被实例化时,会调用父类(抽象类)的抽象方法。
  • 抽象方法不能被final、static修饰,原因是:final修饰的方法不能被重写、static修饰的方法依赖于类,不依赖于对象,故子类不可重写。

1.4 抽象类的使用

abstract class Animal{public String name;public int age;public Animal(String name, int age) { //抽象类的构造方法this.name = name;this.age = age;}public abstract void eat();//抽象方法
}class Cat extends Animal{public Cat(String name, int age) {//子类的构造方法super(name, age);//调用抽象类的构造方法}@Override    //重写抽象类中的抽象方法public void eat() {System.out.println("吃猫粮...");}
}

 1.5 抽象类的作用

  • 相比于继承普通类,抽象类被要求只能被继承,这样有利于我们描述一个对象。
  • 相比于重写普通的方法,抽象类多了一层编译检验,要求子类必须重写抽象方法,这样更利于我们的开发,更有有利于多态的实现。

二、接口(interface、implements)

  顾名思义,现实中的接口:如USB接口、TypeC接口、有线耳机接口...从这些例子中可以看出:接口是一个统一的规范。在Java中,接口就是多个类的一种统一规范。

2.1 接口的定义

interface Ieat{
//关键字  接口名
} 

接口的定义与类的定义类似,只是把class换成了interface。一般情况下,接口名以大写的I来开头。

2.2 接口的特性

  • 接口也是一种引用类型。
  • 接口与抽象类一样,不能直接实例化对象,只能由一个类来实现一个接口。
  • 接口中的成员变量默认由 public static final 修饰。
  • 接口中的方法默认由 public abstract 修饰,也就是抽象方法。(其他修饰符都会报错)。
  • 严格来讲,接口不属于类,但是接口编译后的字节码文件的后缀也是class。
  • 接口中的方法不能由接口实现,只能由实现了该接口的类来实现。
  • 一个类只能继承一个父类,但是可以实现多个接口,多个接口之间由逗号隔开。
  • 一个类实现多个接口时,每个接口的抽象方法都要实现,否则必须设置为抽象类。
  • 接口和接口之间可以实现多继承(extends),表示接口的扩展。

2.3 接口的使用

interface Ieat{            //定义一个接口public static final int a = 1;public abstract void eat();
}
abstract class Animal{public String name;public int age;public Animal(String name, int age) {this.name = name;this.age = age;}}class Cat extends Animal implements Ieat{  //继承了一个父类,实现了一个接口public Cat(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("吃猫粮...");    //重写接口中的方法,实现多态}
}

我们用 interface这个关键字来定义一个接口,使用implements关键字来让一个类实现一个接口。

三、抽象类和接口的区别

  • 抽象类可以包含普通方法和普通字段,普通方法和普通字段可以被子类直接使用,不必重写(想重写也可以,没有强制要求)。
  • 接口中的方法都是抽象方法,实现了该接口的类必须重写接口中所有的抽象方法。 
  • 接口中的成员变量都是由public static final修饰,属于类变量,依赖于类的加载而被加载。且不可被修改。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【vue实战项目】通用管理系统:作业列表

目录 目录 1.前言 2.后端API 3.前端API 4.组件 5.分页 6.封装组件 1.前言 本文是博主前端Vue实战系列中的一篇文章,本系列将会带大家一起从0开始一步步完整的做完一个小项目,让你找到Vue实战的技巧和感觉。 专栏地址: https://blog…

springboot 实现kafka多源配置

文章目录 背景核心配置自动化配置类注册生产者、消费者核心bean到spring配置spring.factoriesyml配置使用 源码仓库 背景 实际开发中,不同的topic可能来自不同的集群,所以就需要配置不同的kafka数据源,基于springboot自动配置的思想&#xf…

Centos 7下的VulFocus靶场搭建详细教程

一、靶场介绍 自带 Flag 功能:每次启动 flag 都会自动更新,明确漏洞是否利用成功。带有计分功能。兼容 Vulhub、Vulapps 中所有漏洞镜像。 二、下载安装 下载 VMware 软件下载 centos镜像 三、Docker知识 学习链接:https://www.runoob.c…

如何在路由器上安装代理服务:详细教程

如何在路由器上安装代理服务:详细教程 步骤一:通过漏洞进入路由器系统开启Telnet服务使用Telnet登录路由器系统查看系统信息和CPU信息步骤二:交叉编译MIPS程序 Go对MIPS的支持 安装TFTP Server使用BusyBox tftp传输文件在路由器系统中下载编译…

linux进程加载和启动过程分析

我们的源代码通过预处理,编译,汇编,链接后形成可执行文件,那么当我们在终端敲下指令$ ./a.out argv1 argv2 后,操作系统是怎么将我们的可执行文件加载并运行的呢? 首先知道,计算机的操作系统的启动程序是写死在硬件上的,每次计算机上电时,都将自动加载启动程序,之后…

四、.Net8对接Ollama实现文字翻译(.Net8+SemanticKernel+Ollama)本地运行自己的大模型

.Net8SemanticKernelOllama 一、Semantic Kernel官方定义SK能做什么? 二、基本使用1、普通对话2、使用插件实现文本翻译功能 三、IChatCompletionService、ITextGenerationService、ITextEmbeddingGenerationService 很多情况都有这样的需求,使用自有系统…

运筹学_5.动态规划

文章目录 引言5.1 动态规划的基本概念首先明确什么是多阶段决策问题 5.2 动态规划的最短路径问题贝尔曼最优化原理建立动态规划模型的步骤 5.3 动态规划的投资分配问题投资分配问题定义投资分配问题的数学模型 5.4 动态规划的背包问题背包问题定义背包问题数学模型 引言 动态规…

Java——二进制原码、反码和补码

一、简要介绍 原码、反码和补码只是三种二进制不同的表示形式,每个二进制数都有这三个形式。 1、原码 原码是将一个数的符号位和数值位分别表示的方法。 最高位为符号位,0表示正,1表示负,其余位表示数值的绝对值。 例如&…

前端JS必用工具【js-tool-big-box】学习,检测密码强度

js-tool-big-box 前端工具库,实用的公共方法越来越多了,这一小节,我们带来的是检测密码强度。 我们在日常开发中,为了便于测试,自己总是想一个简单的密码,赶紧输入。但到了正式环境,我们都应该…

智能售货机的小投入大回报创业机遇

智能售货机的小投入大回报创业机遇 在当今这个快速进化的数字时代,智能售货机作为零售领域的新秀,正以其独特的便捷性和创新性逐步重塑传统零售格局。24小时不间断服务与自动化管理的结合,大幅度削减人力成本,使得智能售货机成为…

电脑突然提示:“failed to load steamui.dll”是什么情况?分享几种解决steamui.dll丢失的方法

相信有一些用户正在面临一个叫做“failed to load steamui.dll”的问题,这种情况多半发生在试图运行某个程序时,系统会提示一条错误消息:“failed to load steamui.dll”。那么,为何steamui.dll文件会丢失,又应该如何解…

Linux 使用 yum安装 ELK服务,yum 安装elasticsearch和Kibana(未写完)

文章目录 环境准备ELK组件介绍安装Elasticsearch安装Kibana 丢弃下载ELK 服务安装包Elasticsearch安装 Tips:关闭elasticsearch https修改 es 启动内存 环境准备 ELK组件介绍 ElasticSearch : 是一个近实时(NRT)的分布式搜索和分析引擎&…

Unity + 雷达 粒子互动(待更新)

效果预览: 花海(带移动方向) VFX 实例 脚本示例 使用TouchScript,计算玩家是否移动,且计算移动方向 using System.Collections; using System.Collections.Generic; using TouchScript; using TouchScript.Pointers; using UnityEngine; using UnityEngine.VFX;public …

python中的while循环

没有循环时,想打印0-100之间的数字,则需要循环多次,例: print(0) print(1) print(2) print(3) ... print(99) 但是使用循环的话,就不会有那么麻烦 while 循环 while 这个单词有“在……时”的含义,whil…

AI智能分析技术与安防视频融合当前面临的困难与挑战

人工智能与安防视频的融合为现代安全领域带来了革命性的变化,提高了安全管理水平、降低了管理成本并为用户提供了更加便捷和高效的服务。随着技术的不断进步和应用场景的不断拓展,未来人工智能与安防的融合将展现出更加广阔的发展前景。然而,…

Linux 服务查询命令(包括 服务器、cpu、数据库、中间件)

Linux 服务查询命令(包括 服务器、cpu、数据库、中间件) Linux获取当前服务器ipLinux使用的是麒麟版本还是cenos版本Linux获取系统信息Linux查询nignx版本 Linux获取当前服务器ip hostname -ILinux使用的是麒麟版本还是cenos版本 这个文件通常包含有关L…

Vue进阶之Vue无代码可视化项目(三)

Vue无代码可视化项目 项目初始化store的使用DataSourceView.vuestores/counter.ts开发模式按钮store/editor.tsLayoutView.vue导航条安装图标iconpackage.jsonstore/debug.tssrc/components/AppNavigator.vueAppNavigator.ts:AppNavigator.vue:theme样式theme/reset.csstheme/v…

CRM系统主要是干什么?CRM系统主要功能和作用

什么是CRM 系统?CRM系统到底是干什么的?不同的企业人员该如何利用CRM去解决他们的问题等等,问题太多了,今天来为大家详细介绍。 干货满满,建议收藏!! 首先第一个问题,什么是CRM系统…

智能监控技术助力山林生态养鸡:打造智慧安全的养殖新模式

随着现代科技的不断发展,智能化、自动化的养殖方式逐渐受到广大养殖户的青睐。特别是在山林生态养鸡领域,智能化监控方案的引入不仅提高了养殖效率,更有助于保障鸡只的健康与安全。视频监控系统EasyCVR视频汇聚/安防监控视频管理平台在山林生…

国产操作系统上Vim的详解01--vim基础篇 _ 统信 _ 麒麟 _ 中科方德

原文链接:国产操作系统上Vim的详解01–vim基础篇 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!今天给大家带来一篇在国产操作系统上使用Vim的详解文章。Vim是一款功能强大且高度可定制的文本编辑器,广泛应用于编程和日常文本编辑中。…