重写和重载、抽象类和接口
文章目录
- 前言
- 一、重载与重写
- 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 横向滚动列表组件,实现向左滑动
效果: 1.封装组件: <template><div class"scroll-list"><divclass"scroll-list-content":style"{ background, color, fontSize: size }"ref"scrollListContent"><div class"scroll…...
Docker一键安装和基本配置
一键安装脚本 注:该脚本需要root权限 curl -sSL https://get.docker.com/ | sh非root组用户赋权 sudo groupadd docker # 若使用一键安装脚本会自动创建这个组,提示已存在 sudo gpasswd -a ${USER} docker # 将当前用户添加到docker组,也…...
MVC设计思想理解和ASP.NET MVC理解
三层模式 三层模式包括:UI层,业务逻辑层,数据访问层,模型层 MVC设计思想和ASP.NET MVC理解 MVC设计思想: MVC的思想就是把我们的程序分为三个核心的模块,这三个模块的详细介绍如下: 模型(Model) :负责封装与引用程序的业务逻辑相关的数据以及对数据的处理方法。模型层有对…...
大模型应用选择对比
大模型应用选择对比 1、知识库对比:dify、fastgpt、langchatchat 2、agent构建器选择:flowise、langflow、bisheng 3、召回率提升方案...
c++STL概述
目录 STL基本概念 STL六大组件 STL的优点 STL三大组件 容器 算法 迭代器 普通的迭代器访问vector容器元素 算法for_each实现循环 迭代器指向的元素类型是自定义数据类型 迭代器指向容器 常用容器 string容器 string的基本概念 string容器的操作 string的构造函…...
利用容器技术优化DevOps流程
利用容器技术优化DevOps流程 随着云计算的快速发展,容器技术也日益流行。容器技术可以打包和分发应用程序,并实现快速部署和扩展。在DevOps流程中,容器技术可以大大优化开发、测试、部署和运维各个环节。本文将介绍如何利用容器技术优化DevO…...
91 # 实现 express 的优化处理
上一节实现 express 的请求处理,这一节来进行实现 express 的优化处理 让 layer 提供 match 方法去匹配 pathname,方便拓展让 layer 提供 handle_request 方法,方便拓展利用第三方库 methods 批量生成方法性能优化问题 进行路由懒加载&#…...
arcgis拓扑检查实现多个矢量数据之间消除重叠区域
目录 环境介绍: 操作任务: 步骤: 1、数据库和文件结构准备 2、建立拓扑规则 3、一直下一页默认参数后,进行拓扑检查 4、打开TP_CK_Topology,会自动带出拓扑要素,红色区域为拓扑错误的地方࿱…...
基于Vue+ELement搭建登陆注册页面实现后端交互
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《ELement》。🎯🎯 …...
JS获取经纬度, 并根据经纬度得到城市信息
在JavaScript中,获取经纬度通常需要使用定位服务,比如HTML5的Geolocation API。然而拿到坐标后,将经纬度转换为城市信息,则需要使用逆地理编码服务接口,比如百度或者高德的 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好久不见,今天分享的是接上次结构体没有分享完的内容,这次我们讲讲位段 枚举和联合体的概念以及他们的用法。 2.1 什么是位段 位段的声明和结构是类似的,有两个不同: 1.位段的成员必须是 int、unsigned int 或signed int 。 …...
PHP循环获取Excel表头字母A-Z,当超过时输出AA,AB,AC,AD······
PHP循环获取Excel表头字母A-Z,当超过时输出AA,AB,AC,AD PHP循环生成Excel的列字母表 $count_num 26 * 27; $letter A; $arr []; while($count_num--){$arr[] $letter;$letter; }结果如下: 转为JSON更为直观: ["A","B&…...
识别准确率达 95%,华能东方电厂财务机器人实践探索
摘 要:基于华能集团公司大数据与人工智能构想理念,结合东方电厂实际工作需要,财务工作要向数字化、智能化纵深推进,随着财务数字化转型和升级加速,信息化水平不断提升,以及内部信息互联互通不断加深&#x…...
代码随想录算法训练营 单调栈part03
一、柱状图中最大的矩形 84. 柱状图中最大的矩形 - 力扣(LeetCode) 单调栈很重要的性质,就是单调栈里的顺序,是从小到大还是从大到小。 栈顶和栈顶的下一个元素以及要入栈的三个元素组成了我们要求最大面积的高度和宽度&#x…...
使用 MyBatisPlus 的注解方式进行 SQL 查询,它结合了条件构造器(Wrapper)和自定义 SQL 片段来构建查询语句。
MyBatis-Plus 是一个基于 MyBatis 的增强工具,它提供了一套方便的注解方式来进行 SQL 查询。其中,它结合了条件构造器(Wrapper)和自定义 SQL 片段来构建查询语句。 官网:条件构造器 | MyBatis-Plus 1、使用 Wrapper …...
Python中统计单词出现的次数,包含(PySpark方法)
思路: 定义一个函数,使用open函数,将文本内容打开。 定义一个空字典和空列表,进行循环及条件判断操作def count_word(file_path):dict_data {} #定义一个空字典f open(file_path,"r",encoding"UTF-8")lis…...
探讨基于IEC61499 的分布式 ISA Batch 控制系统
ISA SP88 是批次过程控制的标准,对应的IEC标准是IEC 61512。该标准中一个重要的部分是配方管理(Recipe Management)。 所谓配方,是根据批量产品的要求,材料设定加工工艺,加工流程和参数。类似于传统制造业的…...
图论16(Leetcode863.二叉树中所有距离为K的结点)
答案: /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/ class Solution {public List<Integer> distanceK(TreeNode root, TreeNode tar…...
【小沐学C++】C++ MFC中嵌入64位ActiveX控件(VS2017)
文章目录 1、简介1.1 MFC1.2 ActiveX 2、VS2017添加ActiveX控件结语 1、简介 1.1 MFC Microsoft 基础类 (MFC) 库针对大部分 Win32 和 COM API 提供面向对象的包装器。 虽然此包装器可用于创建极为简单的桌面应用程序,但当你需要开发具有多个控件的更复杂的用户界…...
Linux常用命令—find命令大全
文章目录 一、find命令常用功能1、find命令的基本信息如下。2、按照文件名搜索3、按照文件大小搜索4、按照修改时间搜索5、按照权限搜索举例:6、按照所有者和所属组搜索7、按照文件类型搜索8、逻辑运算符 一、find命令常用功能 1、find命令的基本信息如下。 命令名…...
form组件的封装(element ui ) 简单版本
当你使用Vue.js构建Web应用时,封装可复用组件是提高开发效率和代码可维护性的关键之一。在这篇文章中,我们将探讨如何使用Vue.js来创建一个通用的表单组件,以及如何将它封装成一个可配置的组件。 实现思路 拿下表单模板一个个的改造&#x…...
树形DP杂题
引 对老师布置的题目稍微记录一下吧 也算对树形 D P DP DP 的巩固 T1 Ostap and Tree 题目传送门 由于有 距离 k 距离k 距离k 的限制,设计二维 d p dp dp 设计状态: f i , j : i 的子树内,离 i 最近的染色点与 i 距离为 j 且若 j <…...
Webpack使用plugin插件自动在打包目录生成html文件
我们使用html-webpack-plugin插件可以自动在打包代码目录生成html文件 使用步骤: 一、安装依赖 在控制台中输入如下代码: npm i -D html-webpack-plugin 二、在webpack.config.js中配置插件 const HTMLPlugin require("html-webpack-plugin&q…...
图像处理与计算机视觉--第一章-计算机视觉简介-10问
第一章-计算机视觉简介-10问 1.CV与AI的关系是什么? CV(Computer Vision)是Al的子领域,它致力于使计算机能够理解和解释图像和数据,CV借助AI技术,比如深度学习/机器学习,实现目标识别,分析和处理任务。AI提供了CV所需要的算法…...
LeetCode 80. 删除有序数组中的重复项 II
文章目录 一、题目二、Java 题解 一、题目 给你一个有序数组 nums,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用…...
【前端面试题】浏览器面试题
文章目录 前言一、浏览器面试问题1.cookie sessionStorage localStorage 区别2.如何写一个会过期的localStorage,说说想法2.如何定时删除localstorage数据2.localStorage 能跨域吗2.memory cache 如何开启2.localstorage的限制2.浏览器输入URL发生了什么2.浏览器如何…...
PHP 生成 PDF文件
参考官网 Example 009 : Image() TCPDF laravel 可以使用 composer 安装 tecnickcom/tcpdf 进行使用 //require_once("../app/Extend/tcpdf/tcpdf.php"); $pdf new TCPDF();// 设置文档信息$pdf->SetCreator(懒人开发网);$pdf->SetAuthor(懒人开发网);$…...
做网站看网页效果/安徽百度推广怎么做
课程名称:2016级计算机科学与工程学院软件工程(西北师范大学) 课程要求:实验一 软件工程准备 三个问题: Q1: 在没有看《构建之法》这本书之前,我对软件工程这门课的概念很模糊,对什么是软件&…...
做产品网站/电商还有发展前景吗
注:本文中 filebeat 的版本为 7.5,不同版本的 filebeat 的行为可能有所差异。 一、前言 filebeat 采集的日志的时间戳,和日志管理平台实际收到的日志时的时间戳,通常都会有几秒的延迟,有些情况下甚至能达到十几秒。其…...
盐城网站推广哪家好/免费seo工具汇总
认识主机板煮 鸡板....咳!「主机板」(Motherboard)不算电脑里最先进的零组件,但绝对是塞最多东西的零组件。事实上,现在新的主机板简直像怪物,上面 可能有数十个长长短短、大大小小、圆的方的、各式各样的插…...
网页界面设计教案/优化网站怎么做
我正在尝试在同一端口上启用tcp,http和websocket.io通信。我开始使用tcp服务器(在行上方),它可以正常工作。然后,我运行了在websocket.io(位于行下方的部分)上找到的echo服务器示例,它也可以正常工作。但是当我尝试将它们合并在一…...
一个网站两个域名 seo/企业查询系统
记录下 分为两种 一般的情况和 使用只能指针(shared_ptr)的情况 如下图 传统的模式被注释掉了 传统的模式需要手动销毁占用内存 shared_ptr模式会自动释放内存 只能一种模式 注释:没有加锁 多线程情况下可能有问题 头文件 CPP文件 如何…...
景德镇建站公司/百度系app有哪些
我用git的目的主要是为了数据的完整性,信息不丢失,虽然repository的代码服务器和本地都会存一份,但有时候自己的小片段代码很多(比如github的gist),不可能每天都用得到,需要定期的备份ÿ…...