详解Java中的重写和重载 | 动态绑定和静态绑定

news2024/10/6 20:32:15

目录

一.重载

二.重写

三.重载和重写的区别


一.重载

重载(overload),Java中为了提高编程效率,允许我们使用方法重载,具体体现在,对于多个方法,他们的方法名相同,但参数列表不同,我们则将这种行为称为方法的重载,比如我们在定义一个加法的方法的时候,为了方便我们程序的调用,我们就可以通过更改参数列表的方法来体现出方法的不同

public class Test_1 {
    public static int add(int a,int b) {
        return a+b;
    }
    public static int add(int a,int b,int c) {
        return a+b+c;
    }
    public static float add(float a,float b) {
        return a+b;
    }
    public static float add(int a,float b) {
        return a+b;
    }
    public static float add(float a,int b) {
        return a+b;
    }
    
    public static void main(String[] args) {
        add(1,2);
        add(1,2,3);
        add(1.2f,2.3f);
        add(1.2f,2);
        add(1,2.2f);  
    }
}

在这里需要注意的有以下几点:

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

 我们可以演示以下,如果只是方法的返回值不同会是怎么样的效果:

    public static int add(int a,int b) {
        return a+b;
    }
    public static float add(int a,int b) {
        return a+b;
    }

当我们出现这样的情况的时候,编译器就会报错了,所以我们在实现重载的时候,切记返回值是否相同并无任何意义,不同的返回值并不会实现重载

编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法 

二.重写

重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写。重写的好处在于子类可以根据需要,定义特定于自己的行为, 也就是说子类能够根据需要实现父类的方法。

重写规则:

  • 子类在重写父类的方法时,一般必须与父类方法原型一致: 返回值类型 方法名 (参数列表) 要完全一致
  • 被重写的方法返回值类型可以不同,但是必须是具有父子关系的
  • 重写的方法访问权限必须大于等于父类的方法。例如:如果父类方法被public修饰,则子类中重写该方法就不能声明为 protected
  • 父类被static、private修饰的方法、构造方法都不能被重写。
  • 重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验 

比如我们用个简单的动物类来举例,我们定义一个动物类,里面有俩个参数,分别是名字和年龄,然后还有一个eat方法,然后我们分别写了Dog类和Cat类来继承了Animal类在继承的子类中,我们分别重写了eat方法

class Animal {
    String name;
    int age;
    public Animal(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void eat() {
        System.out.println("动物正在吃食物");
    }
}
class Dog extends Animal{
    public Dog(String name,int age) {
        super(name,age);
    }
    public void eat() {
        System.out.println(this.name + "正在吃狗粮~~~");
    }
}
class Cat extends Animal{
    public Cat(String name,int age) {
        super(name,age);
    }
    public void eat() {
        System.out.println(this.name + "正在吃猫粮~~~");
    }
}

 对于我们子类继承后重写的方法,我们也可以使用多态的思想来调用他们

    public static void main(String[] args) {
        Cat cat = new Cat("布偶",2);
        Dog dog = new Dog("哈士奇",3);
        cat.eat();
        dog.eat();
    }

 输出结果:

三.重载和重写的区别

重载就相当于的我们为了一次性射中多个目标,所以一次性射出了很多箭

重写就相当于我们对于之前的箭矢进行了针对性的改进,然后射出去这跟改进后的箭矢


区别
重写(override)
重载(override)
参数列表不能修改必须修改
返回类型不能修改(除非构成父子关系)可以修改
访问限定修饰符可以降低限制但不能提高限制可以修改

俩种编程方法很相似,但是体现的编程思维是完全不同的

重载是属于静态绑定,编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法;而重写属于是动态绑定,在刚开始的时候,我们确实是调用的父类中的方法,然后在我们实现了重写后,编译器在调用的时候,就会自己去寻找合适的需要调用的方法




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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js 变量声明与赋值 笔试踩坑题

文章目录 概述函数声明函数形参与实参函数预编译用一个例子说明一下,这四个步骤分别要干些什么。重复四个步骤,反复练习一下 全局编译多重执行期上下文 概述 别小看变量声明与赋值,在所有的笔试中,基本都会考,这个要多…

深度学习 opencv python 实现中国交通标志识别 计算机竞赛_1

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 🔥 优质…

[极客大挑战 2019]BuyFlag 1(两种解法)

题目环境: FLAG NEED YOUR 100000000 MONEY flag需要你的100000000元 F12瞅瞅源代码: if (isset($_POST[password])){ $password $_POST[password]; if (is_numeric($password)) { echo "password cant be number" } elseif ($pas…

Postman的环境变量和全局变量

近期在复习Postman的基础知识,在小破站上跟着百里老师系统复习了一遍,也做了一些笔记,希望可以给大家一点点启发。 多种环境:开发环境、测试环境、预发布环境、生产环境,可以用环境变量来解决。 今天的分享就到这里&a…

『 Linux 』进程概念

文章目录 🗞️ 冯诺依曼体系结构 🗞️📃 为什么在计算机当中需要使用内存充当中间介质而不使CUP与外设直接进行交互?📃 CPU如何读取数据 🗞️ 操作系统(Operating system) 🗞️📃 操作系统如何…

LeetCode【30. 串联所有单词的子串】

给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 words ["ab","cd","ef"], 那么 "abcdef&…

NZ系列工具NZ06:VBA创建PDF文件说明

我的教程一共九套及VBA汉英手册一部,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到数据库,到字典,到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑,这么多知识点该如何组织…

2022美亚杯团队赛

2022美亚杯团体赛 - XDforensics-Wiki 2022 美亚杯 团体赛AGC部分资格赛服务器部分 所有服务器部分解题思路_2022美亚杯团体赛复盘-CSDN博客 目录 AGC 1 2 Media Sever挂载 3 ssh登入的看法 PTS 4 5 ssh日志 6 7 查看docker列表 8 查看docker运行 9 建立网站…

《DevChat:AI编程助手引领开发新潮》

1. DevChat是什么? DevChat是一款由思码逸打造的AI编程工具,致力于提升开发者的编程效率。它集成了多种主流大模型,包括ChatGPT、Codex等,支持自然语言编程、代码编写、代码生成、代码补全等功能。DevChat的最大优势在于一站式服…

竞赛 题目: 基于深度学习的疲劳驾驶检测 深度学习

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 🔥 优…

【Hadoop实战】Hadoop指标系统V2分析

Hadoop指标系统V2分析 文章目录 Hadoop指标系统V2分析架构主要组成部分根据图表解释数据流向指标过滤JMX的应用开启指标系统的组件指标项说明 使用HTTP(JMXJsonServlet)获取指标接口调用方式GET查询的逻辑数据的来源,以及更新的原理 架构 在…

Leetcode2246. 相邻字符不同的最长路径

Every day a Leetcode 题目来源:2246. 相邻字符不同的最长路径 解法1:树形 DP 如果没有相邻节点的限制,那么本题求的就是树的直径上的点的个数,见于Leetcode543. 二叉树的直径。 考虑用树形 DP 求直径。 枚举子树 x 的所有子…

开发ios电脑app的费用受到哪方面的影响?

开发iOS电脑应用程序的费用受到多方面的影响,包括市场需求、功能复杂度、设计要求、开发人员经验、市场竞争以及后期维护等因素,下面我们将详细介绍这些影响因素,帮助您更好地了解开发iOS应用程序的费用构成。 一、市场需求 市场需求是影响…

【JavaEE初阶】 TCP三次握手四次挥手(超详细版)

文章目录 🌴三次握手四次挥手总览🛫三次握手(建立连接)🚩为什么要三次握手📌解决彼此双发彼此认同的问题📌验证双方的接听发送能力是否正常 🚩建立连接阶段涉及到的两个重要状态: &a…

iOS 设置图标和upload包时显示错误

右键-show in finder-AppIcon.appiconset-然后替换图片 然后遇到个问题 就是图片不能有alpha [Xcode]应用图标:ERROR ITMS-90717: “Invalid App Store Icon. The App Store Icon in the asset catalog in x… 具体操作:只需确保【AppIcon】图片集中不…

【23真题】简单!原题很多!211!

今天分享的是23年内蒙古869的信号与系统试题及解析。 本套试卷难度分析:22年内蒙古大学869考研真题,若有需要,戳这里自取!该院校是考察通信原理信号的,从信号部分来看,本套试题内容难度中等偏下&#xff0…

类图复习:类图简单介绍

入职新公司在看新项目的代码,所以借助类图梳理各个类之间的关系,奈何知识已经还给了老师,不得不重新学习下类图的相关知识,此处将相关内容记录下方便后续使用。 文章目录 类图语法类与类的关系画类图 类图语法 语法描述public-pr…

电机应用-无刷直流电机

无刷直流电机 无刷直流电机(Brushless Dirent Current Motor,简称BLDCM)由电动机主体和驱动器组成,无电刷和无换向器,是除了有刷电机外用得最多的一种电机。 无刷直流电机不使用机械的电刷装置,采用方波自控…

网络安全专业的就业方向有哪些?

网络安全专业的就业方向有哪些? 网络安全专业毕业生就业较多,可以从事计算机科学与技术、信息与通信、电子商务、互联网金融、电子政务等领域的相关工作。还可以从事政府机关事业单位、银行、保险等信息安全产品的研发、信息系统安全分析与设计、信息安…

Leetcode_3:无重复字符的最长子串

题目描述: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: s "bbbbb"…