Java:重载和重写

对 Java 中的 重载和重写 这个概念,做一个微不足道的小小小小结

重载

重载:编译时多态,同一个类中的同名的方法,参数列表不同,与返回值无关。

有以下几点:

  1. 方法名必须相同;
  2. 方法的参数列表一定不一样;
  3. 访问修饰符和返回值类型可以相同也可以不同;

重写

重写(又名覆盖):运行时多态,发生在子类与父类之间、子类重写父类的方法具有相同的返回类型、更好的访问权限,简而言之:就是具体的实现类对于父类的该方法实现不满意,需要自己在写一个满足于自己要求的方法。

有以下几点:

  1. 方法名必须相同,返回值类型必须相同(可以不同的,见说明),参数列表必须相同

    说明:自JDK1.5之后的版本,返回值也可以不同,但是必须是父类返回值的子类,其中涉及到了 java 中的"语法糖",即在将 *.java 编译为 *.class过程中,进行了一些自动转换,本质上生成了一种桥接方法synthetic bridge,在此不进行具体展开,后续关于JVM的笔记中会补充说明

  2. 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 在public,那么在子类中重写该方法就不能声明为protected

  3. 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private、final、static 的方法。

    static:重载是基于运行时的多态,而static方法是编译时静态绑定的,static 方法跟类的任何实例都不相关,所以概念上不适用。

    静态方法:静态的方法可以被继承,但是不能重写。如果父类和子类中存在同样名称和参数的静态方法,那么该子类的方法会把原来继承过来的父类的方法隐藏,而不是重写。通俗的讲就是父类的方法和子类的方法是两个没有关系的方法,具体调用哪一个方法是看是哪个对象的引用;这种父子类方法也不再存在多态的性质。

  4. 构造方法不能被重写

总结

重载(Overloading) 重写(Overriding)
类的数量 本类 父子类、接口与实现类
方法名称 一致 一致
参数列表 可以修改 不能修改
返回值类型 可以修改 可以修改,但必须是父类返回值的子类
访问修饰符 可以修改 可以修改,但不能比父类的访问权限低
异常 可以修改 可以减少或删除,但不能扩展

参考

https://blog.csdn.net/qq_42014192/article/details/89707483

Java:重载和重写的更多相关文章

  1. java 重载、重写、构造函数详解

    方法重写 1.重写只能出现在继承关系之中.当一个类继承它的父类方法时,都有机会重写该父类的方法.一个特例是父类的方法被标识为final.重写的主要优点是能够定义某个子类型特有的行为. class An ...

  2. Java——重载和重写

    前言 在程序设计中经常会遇到对对方法的重载或者重写,下面将介绍重载和重写. 重载(Overloade) 重载出现的原因 任何程序设计语言都具备的一项重要特性就是对名字的运用.当创建一个对象时,就给对象 ...

  3. java 重载、重写、重构的区别

    1.重载 构造函数是一种特殊的函数,使用构造函数的目的是用来在对象实例化时初始化对象的成员变量.由于构造函数名字必须与类名一致,我们想用不同的方式实例化对象时,必须允许不同的构造方法同时存在,这就用到 ...

  4. 深入理解Java重载与重写

    我们都知道Java有三大宝,分别是:多态.封装.继承.其中多态主要体现就是重写与重载(有些人认为重载根本不属于多态)两种方式,那么今天就结合研读过JVM之后自己的理解来聊聊重载与重写的VM内部是怎么实 ...

  5. 一句话学Java——Java重载和重写

    概念:重载是指两个不同的函数有相同的名称,可以是在本类之中的函数之间的重载,也可以是子类和父类的函数之间的函数重载. 重写:只能是子类重写父类的函数.这是多态的基础. 重写的规则:     参数:重写 ...

  6. 漫谈java重载与重写

    重载(Overloading):为了让方法名相同而形参不同的构造方法同时存在,让类以统一的方式处理不同类型数据的一种手段 重写(Overriding):导出类对继承自基类的方法做出一定的修改,又称方法 ...

  7. java重载和重写的区别

    一.重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现 ...

  8. java 重载与重写 【转】

    首先我们来讲讲:重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态 ...

  9. java重载和重写

    重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. ...

  10. JAVA构造器,重载与重写

    1. java构造器 构造器也叫构造方法(constructor), 用于对象初始化. 构造器是一个创建对象时被自动创建的特殊方法,目的是对象的初始化. 构造器 的名称与类的名称一致. JAVA通过n ...

随机推荐

  1. Gitlab(1)- 简单介绍

    什么是 Gitlab 一个开源分布式版本控制系统 开发语言:Ruby 功能:管理项目源代码.版本控制.代码复用与查找.权限管控 Git 家族成员 Git:是一种版本控制系统,是一个命令,是一种工具 G ...

  2. shell脚本中的多行注释

    shell 中注释的使用方法 1. 单行注释 单行注释最为常见,它是通过一个'#'来实现的.注意shell脚本的最开始部分"#!/bin/bash"的#号不是用来注释的. 2. 多 ...

  3. MacOS隐藏及显示文件

    ​ 显示隐藏文件 显示所有文件 defaults write com.apple.finder AppleShowAllFiles -boolean true killall Finder 不显示隐藏 ...

  4. 完蛋,公司被一条 update 语句干趴了!

    大家好,我是小林. 昨晚在群划水的时候,看到有位读者说了这么一件事. 在这里插入图片描述 大概就是,在线上执行一条 update 语句修改数据库数据的时候,where 条件没有带上索引,导致业务直接崩 ...

  5. mybatis整理笔记

    以下是idea2018辑编器 新建 Maven工程 1  file ->new ->project 新建后编程器在右下角加载插件.,这个时候需要会儿,  加载好后,软件目录会多一个ja包 ...

  6. HDU1548 Building Roads

    A strange lift Description There is a strange lift.The lift can stop can at every floor as you want, ...

  7. supermvc介绍

    马上要开始写毕设了,需要一个合适的框架.想想自己用过的几个框框speedphp tp啊 还有公司的 dagger啊 ,大同小易.每一种都有自己喜欢的地方.然后想到了二八理论,我们常用的功能可能不到框架 ...

  8. Java基础系列(30)- 命令行传参

    命令行传参 有时候你希望运行一个程序的时候再传递给它消息.这就要靠传递命令行参数main()函数实现 package method; public class CommandLine { public ...

  9. 我在学习Blazor当中踩的巨坑!Blazor WebAssembly调试

    最近嘛,看看Blazor已经蛮成熟的.顺便想在自家的框架里使用这个东西,毕竟我还是很念旧的,而且Blazor的技术栈也不麻烦.然后呢,在调试这一关我可是踩了大坑. 我的VS是2019,很早以前装的.然 ...

  10. 鸿蒙内核源码分析(时钟任务篇) | 触发调度谁的贡献最大 | 百篇博客分析OpenHarmony源码 | v3.05

    百篇博客系列篇.本篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度谁的贡献最大 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度 ...