• 重载和重写的区别

  1. 重载就是同样一个方法能够根据输入数据的不同,做出不同的处理。
  2. 重写就是当子类继承父类的相同方法,输入的数据一样,但要做出有别于父类的响应时,子类就需要覆盖/重写父类的方法。

用一张表更直观的表示两者的区别:

区别点 重载方法 重写方法
发生范围 同一个类 子类
参数列表 必须修改 一定不能修改
返回类型 可修改 子类方法返回值类型应比父类方法返回值类型更小或相等
异常 可修改 子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;
访问修饰符 可修改 一定不能做更严格的限制(可以降低限制)
发生阶段 编译期 运行期

  • 重载(Overloading)

在一个类中(或者父类和子类之间),方法名必须相同,参数类型不同、个数不同、顺序不同、方法返回值、访问修饰符可以不同,则视为重载。

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

public class Father {public static void main(String[] args) {// TODO Auto-generated method stubFather s = new Father();s.sayHello();s.sayHello("wintershii");}public void sayHello() {System.out.println("Hello");}public void sayHello(String name) {System.out.println("Hello" + " " + name);}
}

综上:重载就是同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理。

总结:

  1. 重载Overload是一个类中多态性的一种表现
  2. 重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)
  3. 重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准

  • 重写(Overriding)

重写发生在运行期,是子类对父类的允许访问的方法的实现过程的重新编写。

从字面上看,重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍

子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。

但要注意子类函数的访问修饰权限不能少于父类的。

public class Father {public static void main(String[] args) {// TODO Auto-generated method stubSon s = new Son();s.sayHello();}public void sayHello() {System.out.println("Hello");}
}class Son extends Father{@Overridepublic void sayHello() {// TODO Auto-generated method stubSystem.out.println("hello by ");}
}

原因: 在某个范围内的整型数值的个数是有限的,而浮点数却不是。

方法的重写要遵循“两同、两小、一大”(以下内容摘录自《疯狂 Java 讲义》 ):

  • “两同”:即方法名相同、形参列表相同;
  • “两小”:指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;
  • “一大”:指的是子类方法的访问权限应比父类方法的访问权限更大或相等。

综上:重写就是子类对父类方法的重新改造,外部样子不能改变,内部逻辑可以改变

总结:

  1. 重写多发生在父类与子类之间;
  2. 方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同;
  3. 访问修饰符的限制一定要大于或等于父类的访问修饰符(public>protected>default>private)
  4. 构造方法无法被重写;
  5. 重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
  6. 如果方法的返回类型是 void 和基本数据类型,则返回值重写时不可修改。
  7. 如果方法的返回值是引用类型,重写时是可以返回该引用类型的子类的。

Java中的重载(overloading)和重写(overriding)相关推荐

  1. Java中方法重载和方法重写的区别

    文章目录 1 Java中方法重载和方法重写的区别 1 Java中方法重载和方法重写的区别 主要区别如下: 方法重载: 在同一个类中 方法名相同 参数个数.顺序.类型不同 返回值类型.访问修饰符任意 方 ...

  2. JAVA中list.contains()方法,要重写equals(),hashcode()方法

    今天动力节点java培训机构小编为大家介绍"JAVA中list.contains()方法,要重写equals(),hashcode()方法",希望能够帮助正在学习java的零基础学 ...

  3. java 重载 不可_深入深刻深到不能再深的理解java中的重载和重写

    面向对象的三个特性 面向对象有三个重要的特性:多态,继承,封装. 多态的表现 多态的在java中的应用体现在方法的重载和重写. 重载:字面上的意义一个类里面,有同名但是参数必须不相同的方法.(这里的& ...

  4. 关于java方法的重载(Overloading),覆写(Override)以及final 方法的几点说明

    昨天在一个群里面一个群友问道final 方法可不可以重载,我不假思索的说final 方法不能继承不能重载.后来晚上睡不着觉想想总觉得不对头,翻翻书一看自己简直就是胡说八道,才意识到这些基础概念的东西时 ...

  5. 在java中方法重载的要求,Java方法的重载

    Java方法的重载 方法重载:在类中方法名称相同,但是形式参数不同 public class Demo15 { public static void main(String[] args) { int ...

  6. java中的重载和重写

    1.重载:可以在同一个类中存在多个函数,函数名称相同但参数列表(参数个数,参数类型,参数顺序)不同, 不能通过方法返回值类型,访问权限以及抛出异常来定义重载. 2.重写: "重写(覆盖)&q ...

  7. 【JavaSE_08】Java中static、继承、重写

    #一.Static 学习静态这个关键字,关键是抓住两个点: 1,关注其语法特点 2,关注其使用场景 案例讲解: 我们先从静态变量开始,当一个成员变量加上static修饰之后,会是一个什么效果? 比如创 ...

  8. Java中抽象类与方法的重写

    1. 抽象类 关键字:abstract 类:用来描述一类具体的事物 抽象类:抽象的.模糊的.不具体的类 在Java的普通类中是不允许多继承的,原因是会出现调用 不明确的问题; 总结:父类中的功能是不能 ...

  9. java中laber字体颜色设置,重写jxl中可用的颜色实现自定义颜色

    在jxl组建中没有提供直接的自定义16进制颜色的方法,但是可以通过他的某些方法来实现 参考方法如下: package com.manager.util; import java.awt.Color; ...

  10. java 中方法重载

    方法的重载* 在同一个类中,方法名相同,参数列表不同.与返回值类型无关.* 参数列表不同:* A:参数个数不同* B:参数类型不同* C:参数的顺序不同(不算重载 报错)ex:public class ...

最新文章

  1. MacOS sublime-text-removal
  2. python能做什么游戏好-用Python可以做哪些有意思的小游戏呢?
  3. scala 定义空list_Scala的存在类型
  4. python基础语法类型_Python基本语法[2]-简单数据类型,基础
  5. 关于Image创建的内存管理
  6. java 指代对象_06JAVA面向对象之封装
  7. android java 调用栈_Android开发中打印方法调用栈
  8. 由异常掉电问题---谈xfs文件系统
  9. sqlserver存储过程加锁后怎么解锁_MySQL 的加锁处理,你都了解的一清二楚了吗?...
  10. Cannot use v-for on stateful component root element because it renders multiple elements.
  11. 先科机顶盒一直出现android,网络电视机顶盒停留在开机界面,无法开机的解决办法...
  12. c++ 调用meshlab程序慢_MeshLab中插件的添加过程
  13. Dart 语言入门基础(一)
  14. python能在ipad上运行吗_如何用iPad运行Python代码?
  15. 大厂对学历的要求是什么?如果学历不够,拿什么来凑?
  16. 命名空间又称名字空间,英文名:Namespace
  17. Oracle数据库的毗邻
  18. U3D Shader半兰伯特模型
  19. Unity 导出 obj, fbx
  20. 计算机技术在多晶体衍射中的应用,透射电镜电子衍射在晶体结构分析中的应用...

热门文章

  1. Java的新项目学成在线笔记-day14(二)
  2. 设计模式C++实现--Factory模式
  3. NPM酷库050:xmlbuilder,创建XML文件
  4. Google App Engine CMS系统的搭建
  5. 《UNIXLinux程序设计教程》一1.3 UNIX基本概念
  6. easyui 中iframe嵌套页面,提示弹窗遮罩的解决方法,parent.$.messager.alert和parent.$.messager.confirm...
  7. 【JAVA】什么时候会发生空指针异常
  8. Kohana - PHP5框架 - 我看过的开源框架
  9. 第一次使用vim遇到的问题及常用方法
  10. HENXU-SOA的业务规划和建模方法之八——组件化业务模型(CBM)介绍