当前位置: 首页 > news >正文

Java基础:抽象类与接口

1、抽象类和接口的定义:

(1)抽象类主要用来抽取子类的通用特性,作为子类的模板,它不能被实例化,只能被用作为子类的超类。

(2)接口是抽象方法的集合,声明了一系列的方法操作,如果一个类实现了某个接口,那么它必须实现这个接口的所有抽象方法。

2、抽象类与接口的区别:

(1)抽象类和接口都用于抽象化具体对象的,都不能直接实例化,但是两者的侧重点不同:抽象类主要用来抽象类型,表示这个对象是什么;接口主要用来抽象功能,表示这个对象能做什么;

(2)接口可以看成抽象类的变体,所有方法都是抽象的,因此接口只能做方法的声明,不能有方法的实现;而抽象类可以有默认的方法实现,既可以做方法的声明,也可以做方法的实现;

如果往抽象类中添加新的方法,可以给他提供默认的实现,因此可以不需要改变子类的代码;如果往接口中添加方法,那么必须改变实现该接口的类(JDK8 之后,接口也可以有默认的实现)

(3)接口可以继承多个接口,抽象类不可以多继承类,但可以单继承类或多实现接口。

(4)抽象方法和接口函数都不能使用static修饰。抽象方法的访问修饰符可以是public、protected和default,不能是private;接口的默认访问修饰符为public,不能使用其他修饰符。

(5)接口的变量只能是不可变常量,默认修饰符都是public static final;但是抽象类的变量可以是普通变量

(6)抽象类可以有构造器,接口不能有构造器。

(7)接口实现类必须实现接口中的所有声明的方法,但抽象类的子类可以部分实现父类的抽象方法,但如果子类不能全部实现抽象方法,那么该子类只能是抽象类;

(8)与正常Java类的相比,抽象类除了不能实例化之外,和正常Java类没有任何区别,但接口和正常Java类是完全不同的类型。

(9)抽象类和接口是Java语言中两种不同的抽象概念,他们的存在对多态提供了非常好的支持,虽然他们之间存在很大的相似性。抽象类的功能远远超过接口,但是定义抽象类的代价比较高。因为每个类只能继承一个类。因此,在这个抽象类中,你必须编写出其子类的所有共性。虽然接口在功能上会弱化很多,但是他只是针对一组动作的描述,而且可以在一个类中同时实现多个接口,因此在设计阶段会降低难度。

3、分别在哪些地方使用抽象类和接口?

(1)当你关注一个事物的本质时,使用抽象类;当你关注一组操作的时候,使用接口。

(2)如果拥有一些方法并且想让他们中有一些默认的是实现,那么可以使用抽象类。

(3)如果想实现多重继承,那必须使用接口。由于Java不支持多继承,子类不能够继承多类,但是可以实现多个接口。

(4)如果基本功能在不断改变,那么就需要使用抽象类,如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

四、总结

1、 抽象类在java语言中所表示的是一种继承关系,一个子类只能存在一个父类,但是可以存在多个接口。

2、 在抽象类中可以拥有自己的成员变量和非抽象类方法,但是接口中只能存在静态的不可变的成员数据(不过一般都不在接口中定义成员数据),而且它的所有方法都是抽象的。

3、抽象类和接口所反映的设计理念是不同的,抽象类所代表的是“is-a”的关系,而接口所代表的是“like-a”的关系

抽象类和接口是java语言中两种不同的抽象概念,他们的存在对多态提供了非常好的支持,虽然他们之间存在很大的相似性。但是对于他们的选择往往反应了您对问题域的理解。只有对问题域的本质有良好的理解,才能做出正确、合理的设计。

相关文章:

Java基础:抽象类与接口

1、抽象类和接口的定义: (1)抽象类主要用来抽取子类的通用特性,作为子类的模板,它不能被实例化,只能被用作为子类的超类。 (2)接口是抽象方法的集合,声明了一系列的方法…...

llama.cpp:PC端测试 MobileVLM -- 电脑端部署图生文大模型

llama.cpp:PC端测试 MobileVLM 1.环境需要2.构建项目3.PC测试 1.环境需要 以下是经实验验证可行的环境参考,也可尝试其他版本。 (1)PC:Ubuntu 22.04.4 (2)软件环境:如下表所示 工…...

Web前端基础知识(一)

前端是构建网页的一部分,负责用户在浏览器中看到和与之交互的内容。 网页是在浏览器中呈现内容的文档或页面。 通常,网页使用HTML、CSS、JavaScript(JS)组成。 HTML:定义了页面的结构和内容。包括文本、图像、链接等。 CSS:定义页面的样式…...

基于谱聚类的多模态多目标浣熊优化算法(MMOCOA-SC)求解ZDT1-ZDT4,ZDT6和工程应用--盘式制动器优化,MATLAB代码

一、MMOCOA-SC介绍 基于谱聚类的多模态多目标浣熊优化算法(Multimodal Multi-Objective Coati Optimization Algorithm Based on Spectral Clustering,MMOCOA-SC)是2024年提出的一种多模态多目标优化算法,该算法的核心在于使用谱…...

国标GB28181摄像机接入EasyGBS如何通过流媒体技术提升安防监控效率?

随着信息技术的飞速发展,视频监控技术已成为维护公共安全和提升管理效率的重要手段。国标GB28181作为安防行业的统一设备接入与流媒体传输标准,为视频监控系统的互联互通提供了坚实的基础。EasyGBS作为一款基于GB28181协议的视频云服务平台,通…...

[Unity] ShaderGraph动态修改Keyword Enum,实现不同效果一键切换

上次更新已然四个月前,零零散散的工作结束,终于有时间写点东西记录一下~ 实际使用中,经常会碰到同一个对象需要切换不同的材质,固然可以通过C#直接替换材质球。 或者在ShaderGraph中使用Comparison配合Branch实现切换&#xff…...

Unity开发哪里下载安卓Android-NDK-r21d,外加Android Studio打包实验

NDK下载方法(是r21d,不是r21e, 不是abc, 是d版本呢) google的东西,居然是完全开源的 真的不是很多公司能做到,和那种伪搜索引擎是不同的 到底什么时候google才会开始造车 不过风险很多,最好不要合资,风险更大 Andr…...

FFTW基本概念与安装使用

FFTW基本概念与安装使用 1 基本概念2 编译安装3 使用实例3.1 单线程3.2 多线程 本文主要介绍FFTW库的基本概念、编译安装和使用方法。 1 基本概念 FFTW (Fastest Fourier Transform in the West)是C语言的一个子程序库,用于计算一维或多维离散傅里叶变换(Discrete …...

【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析

Hiヽ(゜▽゜ )-欢迎来到蓝染Aizen的CSDN博客~ 🔥 博客主页: 【✨蓝染 の Blog😘】 💖感谢大家点赞👍 收藏⭐ 评论✍ 文章目录 行为型模式1、模板方法模式(1)概述(2&…...

教师如何打造专属私密成绩查询系统?

期末的校园,被一种特殊的氛围所笼罩。老师们如同辛勤的工匠,精心打磨着每一个教学环节。复习阶段,他们在知识的宝库中精挑细选,把一学期的重点内容一一梳理,为学生们打造出系统的复习框架。课堂上,他们激情…...

【1224】C选填(字符串\0占大小,类大小函数调用,const定义常量,逗号表达式取尾,abs返回值

1.设有数组定义: char array[]"China"; 则数组array所占的存储空间为__________ 6 注意要加上\0的位置 数组中考虑‘\0’,sizeof()判断大小也要考虑‘\0’ 2.初始化数组char[] strArray"kuai-shou",strArray的长度为(&am…...

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——终篇

本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——终篇 ​ 至此,本系列的所有备赛分享已经结束 ​ 首先说说备赛的过程吧,这次比赛,真的是让我学到了太多书本上学不到的东西。一开始,对统筹控制还很模糊&a…...

复合机器人:开启智能制造新时代

在当今科技飞速发展的时代,智能制造已成为制造业转型升级的关键驱动力。而复合机器人作为智能制造领域的一颗璀璨新星,正以其卓越的性能和创新的设计,为各行各业带来前所未有的变革与机遇。 复合机器人,顾名思义,是融…...

装饰者模式

代码详解:【设计模式】Java 设计模式之装饰者模式(Decorator)_java 装饰者模式-CSDN博客 // 抽象构件角色 public interface Component {void operation(); }// 具体构件角色 public class ConcreteComponent implements Component {Override…...

【机器学习】当教育遇上机器学习:打破传统,开启因材施教新时代

我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 教育是人类社会发展的基石,然而传统教育模式往往难以满足每个学生的个性化需求。随着机器学习技术的兴起,教…...

【蓝桥杯每日一题】分糖果——DFS

分糖果 蓝桥杯每日一题 2024-12-24 分糖果 DFS 题目描述 两种糖果分别有 9 个和 16 个,要全部分给 7 个小朋友,每个小朋友得到的糖果总数最少为 2 个最多为 5 个,问有多少种不同的分法。糖果必须全部分完。 只要有其中一个小朋友在两种方案中…...

information_schema是什么?

前言 在现代数据驱动的应用开发中,理解和管理数据库结构变得尤为重要。几乎所有的SQL数据库管理系统(DBMS)都提供了一个名为 information_schema 的虚拟数据库。它不仅是一个了解数据库内部结构的强大工具,也是一个实现跨平台兼容…...

案例分析-THC7984设计问题报告

目录 简介 配置信息 结论: 简介 使用的环境 AD芯片:THC7984 VGA信号:通过电脑主机产生1024x768 60HZ信号。 配置信息 AD数字数字产生通过FPGA接收。 AD寄存器配置(第一个数数据,第二个是地址): iic_write_reg 1 0x1e iic_write_reg 02 0x5...

HarmonyOS NEXT 技术实践-基于基础视觉服务的多目标识别

在智能手机、平板和其他智能设备日益智能化的今天,视觉识别技术成为提升用户体验和智能交互的重要手段。HarmonyOS NEXT通过基础视觉服务(HMS Core Vision)提供了一套强大的视觉识别功能,其中多目标识别作为其关键技术之一&#x…...

【python】银行客户流失预测预处理部分,独热编码·标签编码·数据离散化处理·数据筛选·数据分割

数据预处理 通过网盘分享的文件:银行流失预测数据和代码 链接: https://pan.baidu.com/s/1loiB8rMvZArfjJccu4KW6w?pwdpfcs 提取码: pfcs 非数值特征处理 目的:将非数值特征转换为数值型,以便模型能够处理。方法: 地理位置&am…...

【JavaEE】-- HTTP

1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

HTML 列表、表格、表单

1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

浅谈不同二分算法的查找情况

二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况&#xf…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线, n r n_r nr​ 根接收天线的 MIMO 系…...

C++使用 new 来创建动态数组

问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘&#xf…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...