在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. Spring框架-AOP详细学习[转载]

    参考博客:https://blog.csdn.net/qq_22583741/article/details/79589910#4-%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85% ...

  2. Cyclone IV FPGA 器件笔记

    LE(逻辑单元)操作模式 1) 正常模式 2)算术模式 可以看到对于Cy4来说正常模式和算术模式的区别就是正常模式有一个4输入LUT没有cout进位输出,而算术模式有两个3输入LUT有cout进位输出 ...

  3. virtualenv安装及使用

    环境 Windows 10 python 3.6.7 安装 virtualenv用于创建虚拟环境,用于隔离不同的python版本的运行,是容器类软件.这里在Windows下通过pip安装: pip i ...

  4. 利用 v-html 将后台数据中的换行符在页面输出

    在拿到后台传入的数据时:有些换行符,空格等会直接输出在页面   (/n .<br/> 等) 用  v-html 来解决: <div v-html="message" ...

  5. 解决:win7右键打开方式添加应用程序无法设置和删除多余的打开方式

    win7右键打开方式添加应用程序无法设置 点击“开始”—“运行”,输入“regedit”打开注册表,在“HKEY_CLASSES_ROOT\Applications\”中找到无法添加的程序 ( 比如“ ...

  6. C#通过文件路径获取文件名小技巧

    string fullPath = @"\WebSite1\Default.aspx"; string filename = System.IO.Path.GetFileName( ...

  7. .net基础学java系列(六)Java基础

    一.废话 .net学java为何一直没入坑?其实大家都知道,语法很相似,就是使用的习惯不同 稍微的语法差异 结构体系不同 IDE不同 类库集不同 各种框架不同 对于我来说,我一直被第三道坎拦住了,所以 ...

  8. 星环大数据安全组件Guardian与hadoop自带的安全组件区别

    在进行讲解之前,先带大家学习下hadoop关于hdfs自己的安全如何实现的--------------------------- 名词: ACL-访问控制列表(Access Control List, ...

  9. 浅谈Java语言中ArrayList和HashSet的区别

    Java语言中ArrayList和HashSet的区别 2019-04-10   13:22:49 一.基本区别 首先一起看个实例,其代码如下: package com.MrZ_baby.com; i ...

  10. 随笔【js】

    1.js是大小写敏感的 2. 区别 getElementBy ID , getElementsBy Name,  getElementsBy TagName以人来举例说明,人有能标识身份的身份证,有姓 ...