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

重写和重载、抽象类和接口

文章目录

  • 前言
  • 一、重载与重写
    • 1.重载(Overload)
      • (1)条件
      • (2)举例
    • 2.重写(Override)
      • (1)规则
      • (2)举例
    • 3.重载和重写区别
  • 二、抽象类与接口
    • 1.抽象类
      • (1)特性
      • (2)作用
      • (3)举例
    • 2.接口
      • (1)语法规则
      • (2)特性
      • (3)举例
    • 3.抽象类和接口的区别
    • 4.普通类和抽象类的区别


前言

本文主要记录重写和重载、抽象类和接口的概念以及它们之间的区别。


一、重载与重写

1.重载(Overload)

由于“一词多义”,相同的词语有不同的意思,可以说该词语被重载了,同样Java中的方法也是可以重载的。
在Java中,如果多个方法的名字相同,参数列表不同,则称该方法被重载了。

(1)条件

a.方法名必须相同。
b.参数列表必须不同(参数的个数、参数的类型、参数的次序必须不同)
c.与返回值类型是否相同无关。

(2)举例

方法间的重载:

public static int add(int x, int y) {return x + y;}public static int add(int x, int y, int z) {return x + y + z;}public static double add(double x, double y) {return x + y;}

构造方法间的重载:

class Test {public Test() {System.out.println("我是无参构造方法!");}public Test(int a) {System.out.println("我是有一个参数的构造方法!");}public Test(int a, int b) {System.out.println("我是有两个参数的构造方法!");}
}

2.重写(Override)

重写也称为覆盖,重写是子类对父类(非静态、非private修饰、非final修饰、非构造方法等)的方法进行重新编写,返回值和形参都不能改变。
优点:子类可以根据自己的需要实现父类的方法。

(1)规则

a.子类在重写父类的方法时,修饰符、返回值类型、方法名(参数列表)要完全与父类方法一致。
b.返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类
c.访问权限不能比父类中被重写的方法的访问权限更低。
d.父类被static、private修饰的方法、构造方法都不能被重写。
e.可以使用@Override注解来显示重写的方法。

(2)举例

class Animal {String name;int age;public Animal(String name, int age) {this.name = name;this.age = age;}public void fun() {System.out.println(this.name + "," + this.age + "岁,正在吃~");}
}class Dog extends Animal {public Dog(String name, int age) {super(name, age);}@Overridepublic void fun() {System.out.println(name + "," + age + "岁,正在跑~");}}

返回值相同(但必须是父类返回值的派生类)

class Animal {String name;int age;public Animal(String name, int age) {this.name = name;this.age = age;}public Animal eat(String name,int age) {return new Animal(name, age);}
}class Dog extends Animal {public Dog(String name, int age) {super(name, age);}@Overridepublic Dog eat(String name,int age) {return new Dog(name, age);}
}

3.重载和重写区别

区别点重载(Override)重写(Override)
参数列表必须修改不能修改
返回类型可以修改不能修改
访问限定符可以修改不能做更严格的限定,但可以降低限定

方法重载是一个类的多态性表现,方法重写是子类和父类的一种多态性表现。

二、抽象类与接口

1.抽象类

如果一个类中没有包含足够的信息来描绘一个具体的对象,这就是抽象类。没有实际工作的方法,可以将其设计为一个抽象方法,包含抽象方法的类称为抽象类。
在Java中,被abstract修饰的类称为抽象类,被abstract修饰的方法称为抽象方法。

(1)特性

a.抽象类不能直接实例化对象。
b.抽象方法不能是private的。(抽象类没有加修饰限定符,默认是public)
c.抽象方法不能被final和static修饰,因为抽象方法要被子类重写。
d.抽象类必须被继承,并且继承和子类要重写父类中的抽象方法,否则子类也是抽象类。
e.抽象类中不一定包含抽象方法,但有抽象方法的类一定是抽象类。
f.抽象类中可以有构造方法,供子类创建对象时,初始化弗雷德成员变量。

(2)作用

有些任务不需父类执行,只需要子类完成,使用抽象类,可以充分利用编译器的校验。

(3)举例

Person是Student的父类,由于Person中有一个抽象方法,则Person也是抽象类,Student继承Person并重写了Person中的抽象方法。
代码如下(示例):

abstract class Person {String name;public Person(String name) {this.name = name;}public void eat() {System.out.println(name + "正在吃饭~");}public abstract void fun();
}
class Student extends Person {public Student(String name) {super(name);}@Overridepublic void fun() {System.out.println(name + "正在上课~");}
}

2.接口

手机上的耳机孔、充电孔,电脑上的USB接口等都是接口。在Java中,接口可以看作是多个类的公共规范,是一种引用数据类型。

(1)语法规则

接口的定义格式与定义类的格式基本相同,将class关键字换成interface关键字,就定义了一个接口。
接口不能直接使用,必须要有一个“实现类”来“实现”该接口,实现接口中的所有抽象方法。
类与接口之间是implements实现关系。

(2)特性

a.接口类型是一种引用类型 ,但是不能直接new接口的对象。
b.接口中每一个方法都是public的抽象方法(public abstract)。
c.接口中的方法只能由实现接口的类来实现。
d.重写接口中方法时,不能使用default访问权限修饰。
e.接口中可以含有变量,但是接口中的变量会被隐士的指定为public static final变量。
g.接口中不能有静态代码块和构造方法。
h.接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class。
i.如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类。

(3)举例

使用implements实现接口,一个类可以实现多个接口。
代码如下(示例):

interface IShape {void draw();
}
interface IColor {void paint();
}
class Circle implements IShape,IColor {@Overridepublic void draw() {System.out.println("画圆");}@Overridepublic void paint() {System.out.println("上色");}
}
class Triangle implements IShape {@Overridepublic void draw() {System.out.println("画三角形");}
}

3.抽象类和接口的区别

区别抽象类(abstract)接口(interface)
结构组成普通类+抽象方法抽象方法+全局常量
权限各种权限public
子类使用使用extends关键字继承抽象类使用implements关键字实现接口
关系一个抽象类可以实现若干接口接口不能继承抽象类,但是接口可以使用extends继承多个父接口
子类限制一个子类只能继承一个抽象类一个子类可以实现多个接口

4.普通类和抽象类的区别

区别普通类抽象类(abstract)
使用可以被实例化不能被实例化
抽象方法不包含包含
成员变量、构造方法、普通方法有,但成员变量和方法不能声明为private、static和final
静态和非静态的成员变量和方法

抽象类是一种特殊的类,主要用于抽象出多个具有相似特性的类的共性,便于管理和设计,而普通类是最常见的类形式,可以直接被实例化主要用于创建具体的对象。

相关文章:

重写和重载、抽象类和接口

文章目录 前言一、重载与重写1.重载(Overload)(1)条件(2)举例 2.重写(Override)(1)规则(2)举例 3.重载和重写区别 二、抽象类与接口1.抽象类&…...

Untiy UDP局域网 异步发送图片

同步画面有问题,传图片吧 using System.Text; using System.Net.Sockets; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using System.Net; using System; using System.Threading.Tasks; using Sy…...

移动端H5封装一个 ScrollList 横向滚动列表组件,实现向左滑动

效果&#xff1a; 1.封装组件&#xff1a; <template><div class"scroll-list"><divclass"scroll-list-content":style"{ background, color, fontSize: size }"ref"scrollListContent"><div class"scroll…...

Docker一键安装和基本配置

一键安装脚本 注&#xff1a;该脚本需要root权限 curl -sSL https://get.docker.com/ | sh非root组用户赋权 sudo groupadd docker # 若使用一键安装脚本会自动创建这个组&#xff0c;提示已存在 sudo gpasswd -a ${USER} docker # 将当前用户添加到docker组&#xff0c;也…...

MVC设计思想理解和ASP.NET MVC理解

三层模式 三层模式包括:UI层,业务逻辑层,数据访问层,模型层 MVC设计思想和ASP.NET MVC理解 MVC设计思想: MVC的思想就是把我们的程序分为三个核心的模块,这三个模块的详细介绍如下: 模型(Model) :负责封装与引用程序的业务逻辑相关的数据以及对数据的处理方法。模型层有对…...

大模型应用选择对比

大模型应用选择对比 1、知识库对比&#xff1a;dify、fastgpt、langchatchat 2、agent构建器选择&#xff1a;flowise、langflow、bisheng 3、召回率提升方案...

c++STL概述

目录 STL基本概念 STL六大组件 STL的优点 STL三大组件 容器 算法 迭代器 普通的迭代器访问vector容器元素 算法for_each实现循环 迭代器指向的元素类型是自定义数据类型 迭代器指向容器 常用容器 string容器 string的基本概念 string容器的操作 string的构造函…...

利用容器技术优化DevOps流程

利用容器技术优化DevOps流程 随着云计算的快速发展&#xff0c;容器技术也日益流行。容器技术可以打包和分发应用程序&#xff0c;并实现快速部署和扩展。在DevOps流程中&#xff0c;容器技术可以大大优化开发、测试、部署和运维各个环节。本文将介绍如何利用容器技术优化DevO…...

91 # 实现 express 的优化处理

上一节实现 express 的请求处理&#xff0c;这一节来进行实现 express 的优化处理 让 layer 提供 match 方法去匹配 pathname&#xff0c;方便拓展让 layer 提供 handle_request 方法&#xff0c;方便拓展利用第三方库 methods 批量生成方法性能优化问题 进行路由懒加载&#…...

arcgis拓扑检查实现多个矢量数据之间消除重叠区域

目录 环境介绍&#xff1a; 操作任务&#xff1a; 步骤&#xff1a; 1、数据库和文件结构准备 2、建立拓扑规则 3、一直下一页默认参数后&#xff0c;进行拓扑检查 4、打开TP_CK_Topology&#xff0c;会自动带出拓扑要素&#xff0c;红色区域为拓扑错误的地方&#xff1…...

基于Vue+ELement搭建登陆注册页面实现后端交互

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《ELement》。&#x1f3af;&#x1f3af; &#x1…...

JS获取经纬度, 并根据经纬度得到城市信息

在JavaScript中&#xff0c;获取经纬度通常需要使用定位服务&#xff0c;比如HTML5的Geolocation API。然而拿到坐标后&#xff0c;将经纬度转换为城市信息&#xff0c;则需要使用逆地理编码服务接口&#xff0c;比如百度或者高德的 API, 但是他们收费都很高, 我们可以使用一些…...

mac m1 docker安装nacos

文章目录 引言I m1安装docker1.1 Docker 下载1.2 终端Docker相关命令II docker安装nacos2.1 安装nacos2.2 镜像启动see alsoMac 查看进程端口引言 使用docker方式安装是最方便的 I m1安装docker 1.1 Docker 下载 https://docs.docker.com/docker-for-mac/apple-silicon/点击…...

位段 联合体 枚举

Hello好久不见&#xff0c;今天分享的是接上次结构体没有分享完的内容&#xff0c;这次我们讲讲位段 枚举和联合体的概念以及他们的用法。 2.1 什么是位段 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 1.位段的成员必须是 int、unsigned int 或signed int 。 …...

PHP循环获取Excel表头字母A-Z,当超过时输出AA,AB,AC,AD······

PHP循环获取Excel表头字母A-Z&#xff0c;当超过时输出AA,AB,AC,AD PHP循环生成Excel的列字母表 $count_num 26 * 27; $letter A; $arr []; while($count_num--){$arr[] $letter;$letter; }结果如下&#xff1a; 转为JSON更为直观&#xff1a; ["A","B&…...

识别准确率达 95%,华能东方电厂财务机器人实践探索

摘 要&#xff1a;基于华能集团公司大数据与人工智能构想理念&#xff0c;结合东方电厂实际工作需要&#xff0c;财务工作要向数字化、智能化纵深推进&#xff0c;随着财务数字化转型和升级加速&#xff0c;信息化水平不断提升&#xff0c;以及内部信息互联互通不断加深&#x…...

代码随想录算法训练营 单调栈part03

一、柱状图中最大的矩形 84. 柱状图中最大的矩形 - 力扣&#xff08;LeetCode&#xff09; 单调栈很重要的性质&#xff0c;就是单调栈里的顺序&#xff0c;是从小到大还是从大到小。 栈顶和栈顶的下一个元素以及要入栈的三个元素组成了我们要求最大面积的高度和宽度&#x…...

使用 MyBatisPlus 的注解方式进行 SQL 查询,它结合了条件构造器(Wrapper)和自定义 SQL 片段来构建查询语句。

MyBatis-Plus 是一个基于 MyBatis 的增强工具&#xff0c;它提供了一套方便的注解方式来进行 SQL 查询。其中&#xff0c;它结合了条件构造器&#xff08;Wrapper&#xff09;和自定义 SQL 片段来构建查询语句。 官网&#xff1a;条件构造器 | MyBatis-Plus 1、使用 Wrapper …...

Python中统计单词出现的次数,包含(PySpark方法)

思路&#xff1a; 定义一个函数&#xff0c;使用open函数&#xff0c;将文本内容打开。 定义一个空字典和空列表&#xff0c;进行循环及条件判断操作def count_word(file_path):dict_data {} #定义一个空字典f open(file_path,"r",encoding"UTF-8")lis…...

探讨基于IEC61499 的分布式 ISA Batch 控制系统

ISA SP88 是批次过程控制的标准&#xff0c;对应的IEC标准是IEC 61512。该标准中一个重要的部分是配方管理&#xff08;Recipe Management&#xff09;。 所谓配方&#xff0c;是根据批量产品的要求&#xff0c;材料设定加工工艺&#xff0c;加工流程和参数。类似于传统制造业的…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解

一、前言 在HarmonyOS 5的应用开发模型中&#xff0c;featureAbility是旧版FA模型&#xff08;Feature Ability&#xff09;的用法&#xff0c;Stage模型已采用全新的应用架构&#xff0c;推荐使用组件化的上下文获取方式&#xff0c;而非依赖featureAbility。 FA大概是API7之…...

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...