在学习完类和对象后,接下来就要进入面向对象的内容了,先从重写和重载开始吧。重写(Override)和重载(Overload)是两个不同的概念,也是两个容易混淆的概念,下面具体来说说这两者。

重写(Override):

  1. 在一个类被另一个类继承之后,子类可以继承父类的非private属性和方法。但有的时候,子类要根据需要,定义特定于自己的行为, 也就是说子类需要根据需要实现父类的方法。这时候就需要重写父类的方法。重写就是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变

  2. 重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。

  3. 方法的重写规则

  • 参数列表必须完全与被重写方法的相同。

  • 返回类型必须完全与被重写方法的返回类型相同。

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

  • 父类的成员方法只能被它的子类重写。

  • 声明为final的方法不能被重写。

  • 声明为static的方法不能被重写,但是能够被再次声明。

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

  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。

  • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。

  • 构造方法不能被重写。

  • 如果不能继承一个方法,则不能重写这个方法。

重载(Overload):

  1. 在一个类里面,往往我们希望一个方法能实现不同的功能,也就是说虽然方法名相同,但是根据传入的参数不同从而实现不同的功能。这时候就需要用到重载。重载是在一个类里面,方法名字相同,而参数不同,返回类型可以相同也可以不同

  2. 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。

  3. 重载规则

  • 被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);

  • 被重载的方法可以改变返回类型;

  • 被重载的方法可以改变访问修饰符;

  • 被重载的方法可以声明新的或更广的检查异常;

  • 方法能够在同一个类中或者在一个子类中被重载。

  • 返回值类型可以相同也可以不同,无法以返回值类型作为重载函数的区分标准。

总结:

  • 重写与重载之间的区别:
区别点 重载方法 重写方法
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
访问 可以修改 一定不能做更严格的限制(可以降低限制)
  • 方法的重写和重载是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。


Java重写&重载的更多相关文章

  1. java 重写 重载

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

  2. Java - 21 Java 重写(Override)与重载(Overload)

    Java 重写(Override)与重载(Overload) 重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写!返回值和形参都不能改变.即外壳不变,核心重写! 重写的好 ...

  3. Java多态机制和继承中重写重载

    关于Java中多态机制 http://www.cnblogs.com/chenssy/p/3372798.html 这篇博文讲的很透彻 大体意思是 多态定义: 多态就是指程序中定义的引用变量所指向的具 ...

  4. 【技术累积】【点】【java】【23】super以及重写重载

    重写和重载 重写是继承之后的Override 重载是同一个方法,有着不同的入参出参这样子: super 当需要在子类中调用父类的被重写方法时,要使用super关键字. 当然只要是调用父类的方法,都会用 ...

  5. java的重载与重写

    原文链接http://zhhll.icu/2020/11/11/java%E5%9F%BA%E7%A1%80/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/%E9%87%8 ...

  6. Java:重载和重写

    Java:重载和重写 对 Java 中的 重载和重写 这个概念,做一个微不足道的小小小小结 重载 重载:编译时多态,同一个类中的同名的方法,参数列表不同,与返回值无关. 有以下几点: 方法名必须相同: ...

  7. 【Java】重载与重写

    重载与重写 一.重载 定义 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可.同一个类.相同方法名,参数列表不同:参数个数不同,参数类型不同. Java的重载是可以包括 ...

  8. java的重载

    1.java的重载三种:参数类型不同,构成重载,参数类型不同:::::参数顺序不同构成重载::::::参数个数不同,构成重载

  9. Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs

    ylbtech-Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs 1.返回顶部 1. Java 实例 - 重载(ove ...

随机推荐

  1. BATJ面试必会之并发篇

    一.线程状态转换 新建(New) 可运行(Runnable) 阻塞(Blocking) 无限期等待(Waiting) 限期等待(Timed Waiting) 死亡(Terminated) 二.使用线程 ...

  2. JAVA-7NIO之Socket/ServerSocket Channel

    一.ServerSocketChannel Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样.Ser ...

  3. java课件运行实践

    两数相加 源文件:Addition.java 源代码: // An addition program import javax.swing.JOptionPane;  // import class ...

  4. [转]SQL SERVER数据库删除LOG文件和清空日志的方案

    本文转自:https://www.cnblogs.com/ShaYeBlog/archive/2012/09/04/2670505.html 数据库在使用过程中会使日志文件不断增加,使得数据库的性能下 ...

  5. Linux中Redis的安装

    一.下载redis redis官网地址:http://www.redis.io/ 下载地址:http://download.redis.io/releases/ redis中文文档地址:http:// ...

  6. Css3不透明

    Css3允许你使用opacity(不透明)属性设置元素的不透明度 实例: <img src="1.jpg" alt=“view”> img{ opacity:0.45: ...

  7. 通向全栈之路——(5)git通三端

    一.在私有git服务中新建一个项目(码云):将电脑上id_rsa.pub(git公钥)拷贝至ssh下面中保存二.本地代码关联git:1.git全局设置:git config --global user ...

  8. MySQL3:存储过程和函数

    什么是存储过程 简单说,存储过程就是一条或多条SQL语句的集合,可视为批文件,但是起作用不仅限于批处理.本文主要讲解如何创建存储过程和存储函数以及变量的使用,如何调用.查看.修改.删除存储过程和存储函 ...

  9. spring boot入门笔记 (二) - application.properties配置文件

    项目最重要的一个东西,用来定义整个项目的一些东西(端口.访问项目的名称.数据源.日志.集成mybatis等框架.静态资源目录.thymeleaf.热部署等),很重要很重要的. #整个项目的端口号,默认 ...

  10. ID3决策树算法实现(Python版)

    # -*- coding:utf-8 -*- from numpy import * import numpy as np import pandas as pd from math import l ...