在java中,重载与重写都是多态的体现。重载(Overload)体现的是编译时多态,而重写(Override)体现了运行时多态。

重载(Overload):

定义:在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者参数顺序不同)则被视为重载。

需要说明一点的是,重载对返回类型没有要求,返回类型可以相同也可以不同,但不能通过返回类型是否相同来判断重载。

一个栗子:

public class Wine {
public static void main(String[] args) {
Wine wine = new Wine();
wine.drink();
wine.drink("五粮液");
} public void drink(){
System.out.println("喝的是酒...");
} public void drink(String name){
System.out.println("喝的是:"+name);
}
}

控制台输出:

喝的是酒...
喝的是:五粮液

总结:

1)重载(Overload)是一个类中多态的体现;

2)重载要求同名方法的参数列表不同(参数类型、个数、顺序);

3)重载方法返回值类型可以相同可以不同,不能以返回类型判别是否是重载方法。

重写(Override):

定义:子类把父类中已有的方法重新定义一遍。

说明:子类继承了父类原有的方法,但有时子类并不想原封不动的使用父类中的某些方法。所以在方法名、参数列表,返回类型 都相同的情况下,对方法体进行修改或重写。需要注意的是,子类函数的访问修饰符权限不能低于父类的。

一个栗子:

public class Wine {
public static void main(String[] args) {
WLY wine = new WLY();
wine.drink();
} public void drink(){
System.out.println("喝的是酒...");
} } public class WLY extends Wine{
public void drink(){
System.out.println("喝的是五粮液");
}
}

控制台输出:

喝的是五粮液

总结:

1)重写发生在拥有继承关系的父类与子类之间;

2)方法名、参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同;

3)子类中重写方法的访问修饰符权限要大于父类中被重写的方法(public-->protected-->default-->private);

4)重写方法一定不能抛出新的异常或比被重写方法申明更加宽泛的检查型异常。

重载与重写的区别?

方法的重载与重写都是java中实现多态的体现。区别在于前者实现的是编译时多态,而后者实现的是运行时多态。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型、个数,顺序)则视为重载;重写发生在子类与父类之间,重写要求子类重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类重写更好访问,不能比父类被重写方法声明更多的异常(里氏替换原则)。重载对返回类型没有特殊的要求,不能根据返回类型来区别。

参考:https://blog.csdn.net/wintershii/article/details/80558739

Java_重载与重写的更多相关文章

  1. C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱

    一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...

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

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

  3. java 中继承,组合,重载,重写的实现原理 (转)

    我们知道,继承,组合,重载,重写是java语言的面向对象实现的基本特征. 那么在java内部,究竟是如何实现这些面对对象的基本特征的呢? 继承和组合是面向对象中代码复用的主要实现方式,他们可以达到类似 ...

  4. java基础疑难点总结之成员变量的继承,方法重载与重写的区别,多态与动态绑定

    1.成员变量的继承 1.1要点 子类用extends关键字继承父类.子类中可以提供新的方法覆盖父类中的方法.子类中的方法不能直接访问父类中的私有域,子类可以用super关键字调用父类中的方法.在子类中 ...

  5. [转]Java中继承、多态、重载和重写介绍

    什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...

  6. Java中重载和重写的区别

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

  7. C#中区别多态、重载、重写的概念和语法结构

    C#中区别多态.重载.重写的概念和语法结构 重写是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override. 格式: 基类中: public virtual ...

  8. C++中重载、重写(覆盖)和隐藏的区别实例分析

    这篇文章主要介绍了C++中重载.重写(覆盖)和隐藏的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下 本文实例讲述了C++中重载.重写(覆盖)和隐藏的区别,对于C++面向对象程序设计 ...

  9. Java基础:多态(重载和重写)

    转载请注明出处:jiq•钦's technical Blog (1)域与静态方法 记住"仅仅有普通方法的调用是多态的". 而域和静态方法不是:对于域的訪问.在编译期间就已经进行解析 ...

随机推荐

  1. vue 前端框架 (二) 表格增加搜索

    本章知识点 归纳: 1.定义全局过滤器 以及 私有过滤器 2.定义全局指令 以及 定义私有指令 3.定义键盘修饰符 4.v-for 的函数引入 5.字符串的incluede 方法,.toString( ...

  2. vuecli3 项目添加配置文件以及使用@映射、代理

    在根目录下新建 vue.config.js 1.vue.config.js中配置路径别名方法 // vue.config.js module.exports = { configureWebpack: ...

  3. php curl请求

    multipart/form-data 方式 post的curl库,模拟post提交的时候,默认的方式 multipart/form-data ,这个算是post提交的几个基础的实现方式. $post ...

  4. SqlServer变量

    MySql变量 => https://www.cnblogs.com/fanqisoft/p/10700669.html 全局变量 局部变量 ⒈全局变量 以@@开头,后面跟相应的字符串,全局变量 ...

  5. centos7.6设置sftp服务

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议. CentOS自带 SSH 服务,直接配置即可 1. 查看ssh版本 sftp是基于ssh协议的,首先查看 ...

  6. mybatis一对多查询之collection的用法

    首先看一下返回的数据的格式: //获取端子信息List<Map<String, Object>> portList = doneTaskDao.queryTroubleTask ...

  7. docker load 镜像时出现:open /var/lib/docker/tmp/docker-import-500852078/repositories: no such file or dir

    网上下载了一些镜像的压缩包,使用docker load的时候会出现如下错误: open /var/lib/docker/tmp/docker-import-500852078/repositories ...

  8. vue学习(二)

  9. vertx的Actor模型实现

    前言 note: Context 与 EventLoop 关系 : N ; 每次创建一个vericles或者multi instances 通过EventLoopGroup.next挑出一个Event ...

  10. js高级类型

    一.funciton数据类型 1.定义:一个function类型对象,用于管理一个具体函数. function类型相当于Java中java.lang.reflect.Method 2.函数类型对象创建 ...