Java重写与重载

  • 一、重写(Override)
    • 1、方法的重写规则
    • 2、Super关键字的使用
  • 二、重载(Overload)
    • 1、重载规则
  • 三、总结

一、重写(Override)

重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。

废话不多说,直接上代码,看起来更清晰。

class Animal{public void eat(){System.out.println("动物要吃饭");}
}
class Dog extends Animal{public void eat(){System.out.println("狗要吃粑粑");}
}
public class Test{public static void main(String [] args){//创建 Animal 对象Animal animal=new Animal();//创建 Dog 对象Animal dog=new Dog();//执行 Animal 类的eat方法animal.eat();//执行 Dog 类的eat方法dog.eat();}
}

运行结果如下:
动物要吃饭
狗要吃粑粑

我们来分析一下上边的程序,虽然 dog 属于 Animal 类型,但是它运行的是 Dog 的eat 方法。这是因为在编译阶段,只是检查参数的引用类型。但是在运行阶段,Java虚拟机(JVM)会指定对象的类型并且运行该对象的方法。

下边我们举一个反例

class Car{public void run(){System.out.println("汽车可以跑");}
}
class Lamborghini extends Car{public void run(){System.out.println("兰博基尼可以跑的很快");}public void costly(){System.out.println("你买不起兰博基尼,还不快好好学习!");   }
}
public class Test1{public static void main(String [] args){//创建汽车对象Car car=new Car();//创建兰博基尼对象Car L=new  Lamborghini();car.run();L.run();L.costly();}
}

上边的代码直接会报error:
The method costly() is undefined for the type Car

1、方法的重写规则

父类的成员方法只能被子类重写,父类的构造方法不能被重写。(重写适用于继承)
重写的方法的参数列表与被重写方法的参数列表必须完全一致,重写的方法的返回类型可以与被重写方法不相同。
父类声明为 final/static 的方法不能被重写,但是 static 可以被再次声明。
重写的方法不能抛出新的强制性异常,或者比被重写的方法声明的更广泛的强制性异常

2、Super关键字的使用

当需要在子类中调用父类的被重写的方法时,需要使用 super 关键字

直接上代码,在上边动物类的基础上

class Animal{public void eat(){System.out.println("动物要吃饭");}
}
class Dog extends Animal{public void eat(){super.eat();System.out.println("狗要吃粑粑");}
}
public class Test{public static void main(String [] args){//创建 Dog 对象Animal dog=new Dog();//执行 Dog 类的eat方法dog.eat();}
}

运行结果如下:
动物要吃饭
狗要吃粑粑

二、重载(Overload)

重载是在一个类里边,方法名相同参数不同,返回类型可以相同也可以不同。

废话不多说,先上代码:

public class Test1 {//返回值类型和参数列表不同public void test() {System.out.println("我是test1");}public int test(int a) {System.out.println("我是test2");return a;}// 以下两个参数类型顺序不同public String test(int a, String s) {System.out.println("我是test3");return s+a;}public String test(String s, int a) {System.out.println("test4");return s+a;}public static void main(String[] args) {Test1 test1 = new Test1();test1.test();System.out.println(test1.test(8));System.out.println(test1.test(1, "00"));System.out.println(test1.test("11", 0));}
}

运行结果如下:
我是test1
我是test2
8
我是test3
001
test4
110

1、重载规则

被重载的方法必须方法名相同,必须改变参数列表(参数个数或类型不一样)
被重载的方法可以改变访问修饰符,可以改变返回类型

三、总结

方法重载是一个类的多态性的表现,方法重写是父类和子类的一种多态性表现
方法重载是在一个类中定义多个方法名相同,而参数类型、数量或次序不同的方法。
方法重写是在子类中存在与父类的方法的方法名相同、参数相同、返回类型可以不同的方法。

Java的重写和重载相关推荐

  1. Java的重写和重载机制

    Java的重写和重载机制 张磊 zhangleispirit@gmail.com Java的重写和重载是两种在Java中经常提到的两组概念,它们在各个方面都有着很大的不同,本文主要在此做一个归纳总结. ...

  2. java方法重载_在Python中该如何实现Java的重写与重载

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:清风python PS:如有需要Python学习资料的小伙伴可以加点击 ...

  3. Java 方法重写与重载的区别 示例 重载多数相加求和 重写toString()和equals()

    Java 方法重写与重载的区别 重载:在同一个类中,当方法名相同,形参列表不同的时候 多个方法构成了重载 重写:在不同的类中,子类对父类提供的方法不满意的时候,要对父类的方法进行重写. 名称\属性 E ...

  4. Java方法重写与重载

    目录 一.方法重载(overload) 概念 注意 二.方法重写(0verride) 概念 方法重写的应用场景 @Override注解 注意 三.重写与重载区别 访问修饰符 一.方法重载(overlo ...

  5. 【全网第一细,小白福利站】JAVA的重写和重载

    1,重写 1.1首先我们了解一下重写的目的以及要求 重写目的:子类可以继承父类的非私有化的方法,但是有的 时候父类的需求满足不了子类的需求了,这个时候需要重写父类非私有的方法 重写要求: 1.必须有继 ...

  6. Java方法重写与重载的区别

    Java方法重写(Override)与重载(Overload)的区别(超详细) 首页在我们要学习这个知识点之前,应该要先了解什么是多态? 在最初学习java的时候,人们都知道,java这种面向对象的语 ...

  7. Java中重写和重载有哪些区别

    其实java中的重写和重载没有任何关系,只是因为都有个重字,有些小白就会对这两个概念产生混淆,所以也就有很多面试官喜欢问这个题目了. Java中方法的重载和重写都是实现多态的方式,区别在于前者实现的是 ...

  8. java基础——重写与重载

    重载:方法名一样,参数列表的个数,类型,顺序不一样,早期绑定,编译期间就确定方法引用的地址 重写:方法名一样,参数列表的个数,类型,顺序一样,晚期绑定,运行期间才确定方法引用的地址

  9. java的重写、重载、覆盖的差别

    多态性  通过继承,一个类能够用作多种类型:能够用作它自己的类型.不论什么基类型,或者在实现接口时用作不论什么接口类型.这称为多态性 重载  每一个类型成员都有一个唯一的签名.方法签名由方法名称和一个 ...

  10. java中重写和重载的条件

    一.重写条件: 1.子类方法名必须与被覆盖方法名一致 2.子类方法访问修饰符权限必须等于或大于被覆盖方法的访问修饰符权限 3.子类方法的返回值类型必须与被覆盖方法返回值类型一致 4.子类方法抛出异常必 ...

最新文章

  1. 用C#开发网络防火墙技术分析
  2. android+启动脚本,imx6q android 添加开机启动脚本
  3. c enum能像java一样吗_Java枚举替代我如何做到这一点?
  4. [工具库]JOJSONBuilder工具类——一键把多个bean对象数据转换为JSON格式数据
  5. LeetCode 1361. 验证二叉树(图的出入度)
  6. [转载] java重写toString()方法
  7. 关于J2EE项目中三层架构如何在开发中得到正确的实施
  8. 教你轻松截获 Selenium 中的 Ajax 数据
  9. Python的第三方库openpyxl
  10. 江苏省政府投资基金集聚区落地,基金目标规模再增1500亿
  11. 数字信号上下采样对频谱影响,以及如何添加相应滤波器
  12. 思科防火墙配置命令(详细命令总结归纳)
  13. 短信群发助手调试笔记
  14. Alice and the List of Presents CodeForces - 1236B 数学推导
  15. win10笔记本cpu不高内存也不高但就是很卡,一个办法帮你解决!
  16. 可穿戴的“舌头鼠标”,催生“黏腻”人机交互的新想象?
  17. FRM1 P1B1P1B2 整理笔记
  18. 新的vue项目-qq音乐网页版
  19. python,selenium爬取微博热搜存入Mysql
  20. RT-Thread-设备(fal)

热门文章

  1. tukey 窗口_HIFIDIY论坛-频响测量的SPL准确性与窗口对齐 - Powered by Discuz!
  2. 中国外显子组测序行业市场供需与战略研究报告
  3. 微信小程序 | 微信公众平台SpringBoot开发实例 │ 开发一个简易的个人微信公众号
  4. 如何区分手机端 APP 是原生 APP 还是 H5?H5 和原生 APP 之间的区别
  5. 计算机函数两个表格找相同,wps筛选出两个表格中的重复项(countif 函数简单使用)【已解决】...
  6. 万能计算机在线应用,万能计算器在线使用技巧,快点学习吧
  7. keil的终极配色方案(提供配置文件)
  8. android获取电话通话记录,Android获取手机通话记录
  9. python sorted怎么排序_python sorted怎么降序排序
  10. 【收藏】计算机视觉领域全球顶级高校研究所团队总结