java中的方法重载和方法重写有很多区别。 下面给出了方法重载和方法覆盖之间的差异列表:

编号

方法重载

方法重写

1

方法重载用于提高程序的可读性。

方法重写用于提供已经由其超类提供的方法的特定实现。

2

方法重载在类内执行。

方法重写发生在具有IS-A(继承)关系的两个类中。

3

在方法重载的情况下,参数必须不同。

在方法重写的情况下,参数必须相同。

4

方法重载是编译时多态性的例子。

方法重写/覆盖是运行时多态性的例子。

5

在java中,方法重载不能仅通过改变方法的返回类型来执行。方法重载中的返回类型可以相同或不同。 但是必须更改参数类型。

在方法重写/覆盖中返回类型必须相同或协变。

Java方法重载示例

class OverloadingExample {

static int add(int a, int b) {

return a + b;

}

static int add(int a, int b, int c) {

return a + b + c;

}

}

Java方法覆盖示例

class Animal {

void eat() {

System.out.println("eating...");

}

}

class Dog extends Animal {

void eat() {

System.out.println("eating bread...");

}

}

大家看看上面的代码,带着疑问接着看下面的文章会更有效果

一、方法重写(0verride)

在Java 程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。

子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样一种操作方法称为重写,也可以叫覆写或覆盖。

所以,所谓方法的重写是指子类中的方法和父类中继承的方法有完全相同的返回值类型、方法名、参数个数和参数类型。这样就可以实现对父类方法的覆盖。

如果子类将父类的方法重写了,调用的时候肯定是调用被重写过的子类的方法,但是如果要还要继续调用父类的方法我们该怎么做呢?

此时通过 super 关键字可以实现这个功能。super 关键字可以从子类访问父类中的内容,如果要访问被重写过的方法,使用“super.(参数列表)” 的形式调用即可。

当然,如果要使用 super 关键字不一定非要在方法重写后使用,也可以明确的表示某个方法是从父类中继承而来的。使用 super 只是更加明确的说,要从父类中查找,就不在子类中查找了。

重写有以下规则

(1).父方方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。

(2).父类返回的类型必须与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。

(3).Java 中规定,被子类重写的方法不能拥有比父类方法更加样额的访问权限。

编写过Java程序的人应该都知道,父类的中方法并不是在任何情况下都可以重写的,当父类中的方法访问权限修饰符为 private时,该方法只能被自己的类访问,不能被外部访问,在子类是不能被重写的。如果定义父类的方法为 public,在子类定义为private 程序运行就会出错。

(4).由于父类的访问权限修饰符限制一定要大于被子类重写的方法的访问权限修饰符,而 private 权限最小,所以如果某一个方法在父类的访问权限是 private 时,那么就不能再子类中对其进行重写。如果重写定义,也只是定义了一个新的方法,不会达到重写的效果。

(5).在继承过程中如果父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常。而且抛出的异常不能多于父类中抛出的异常(可以等于父类中抛出的异常)。换句话说,重写方法一定不能抛出新的检查异常,或者比被重写方法声明更加宽泛的检查异常。

例如:父类的一个方法申明了一个检查异常 IOException ,在重写这个方法时就不能抛出 Exception,只能抛出 IOException的子类异常,可以抛出非检查异常。同样的道理,如果子类创建了一个成员变量,而该变量和父类中一个变量名称相同,称作变量重写或者属性覆盖(这个概念一般很少人研究,意义不大)。

二、方法重载(ordeloading)

概念:所谓的方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。

方法重载是让类以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们的不同个数和参数来决定具体使用哪个方法,这就是Java中的多态。

在方法重载时,方法之间需要存在一定的联系,因为这样可以提高程序的可读性,一般只重载功能相似的方法。

我们可以定义一些名称相同的方法,再通过定义不同的参数来区分方法,然后在调用时,Java 虚拟机就会根据不同的参数列表来选择合适的方法执行。也就是说,当一个重载的方法被调用时,Java 用参数类型或者个数来决定世界调用的重载方法。因此,每个重载方法的参数的类型或者个数必须不同。

虽然每个重载的方法可以有不同的返回类型,但返回类型并不足以区分所使用的是哪个方法。

当Java 调用一个重载方法时,参数与调用参数匹配的方法被执行。在使用重载要注意以下几点:

(1).在使用重载时只能通过不同的参数列表,必须具有不同的参数列表

(2).不能通过访问权限、返回类型、抛出的异常进行重载

(3).方法的异常类型和数目不会对重载造成影响。

(4).可以有不同的返回值类型,只要参数列表不同就可以

(5).可以有不同的访问修饰符

(6).可以抛出不同的异常

三、方法重写和重载的区别

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java方法的重写和重载_Java方法重载和重写原理区别解析相关推荐

  1. java final 方法重载_java方法重载和覆写的定义,static和final修饰符的讲解,java面试题...

    方法重载的规则: 1.必须发生在同一个类的下面 2.必须保证方法名字相同 3.参数列表不同 参数的类型不同 参数的个数不同 参数的顺序不同 4.返回值:和返回值无关 5.修饰符:和修饰符无关 6.抛出 ...

  2. java重写面试题_Java面试题:重写了equals方法,为什么还要重写hashCode方法?

    核心问题:重写了equals方法,为什么还要重写hashCode方法? 这不仅仅是一道面试题,而且是关系到我们的代码是否健壮和正确的问题.在前面两篇文章涉及到了equals方法的底层讲解:<说说 ...

  3. Java如何调用方法的重载_java方法重载时的调用选择

    重载:方法名相同,参数列表不同:参数列表包括参数的个数,类型,不包括参数的返回值,抛出的异常等. 对于方法重载时具体调用的选择,往往不是很清晰,看代码: public class TestOverlo ...

  4. java方法带参数返回值_Java方法中的参数太多,第6部分:方法返回

    java方法带参数返回值 在当前的系列文章中,我正在致力于减少调用Java方法和构造函数所需的参数数量,到目前为止,我一直专注于直接影响参数本身的方法( 自定义类型 , 参数对象 , 构建器模式 , ...

  5. java重载_Java的重载与覆盖,傻傻分不清!

    重载和覆盖是JAVA多态性的不同表现方式,其中重载是在一个类中多态性的一种表现,是指在一个类中定义了多个同名的方法,他们或有不同参数个数或有不同参数类型. 在使用重载时需注意以下几点: 1)重载是通过 ...

  6. java抽象和接口的理解_Java接口实现与抽象类的区别理解 | 彬菌

    版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 接口:接口是抽象方法的集合.接口通常以interface来声明. 接口注意事项: 1.严格来说,接口是用来实现(i ...

  7. java中implements是什么意思_Java:extends和implements的区别+用法

    Java代码中的extends和implements让我感到很迷惑,现在终于弄明白它们之间的区别和用法了. //定义一个Runner接口 public inerface Runner { int ID ...

  8. java的内部类和外部类_java内部类 和外部类的区别

    下面说一说内部类(Inner Class)和静态内部类(Static Nested Class)的区别: 定义在一个类内部的类叫内部类,包含内部类的类称为外部类.内部类可以声明public.prote ...

  9. java方法重载_Java方法的重载

    生活中的许多事,并不是我们不能做到,而是我们不相信能够做到.(当然赚先一个亿,即使相信也很难做到.) 简介 Java方法的重载就是一个类中,有多个名称相同,但形参不同的函数 规则 方法名称必须相同 方 ...

  10. java 面向对象 重载_Java方法重载

    在同一类中具有多个具有相同名称的方法称为方法重载.类中具有相同名称的方法可以是声明的方法,继承的方法或两者的组合. 重载方法必须具有不同数量的参数,不同类型的参数或两者.方法的返回类型,访问级别和th ...

最新文章

  1. 在 Jenkins 中使用声明式 Pipeline 构建 Android 项目
  2. oc之mac开发 - NSButton - 勾选框(NSButtonTypeSwitch)
  3. gpio的8种工作模式_【超低功耗系列一】STM32L 低功耗产品和模式
  4. SQLite中使用全文搜索FTS
  5. 【PAT】A1074 Reversing Linked List ***
  6. Codeforces Round #704 (Div. 2) E. Almost Fault-Tolerant Database 思维
  7. 智慧屏用鸿蒙的生态,紧随鸿蒙OS手机版 ,智慧屏为什么对鸿蒙生态这么重要?...
  8. 使用react开发管理后台
  9. navmenu 收起没有动画 element_ABC360等3家英语动画片课程测评:用动画片学英语不靠谱?...
  10. python培训价目表-Python培训一般要多少钱?
  11. 网站表单自动填写【使用pyautogui 】
  12. WkwebView调节字体大小获取高度
  13. linux下查看进程+杀死进程方法大全
  14. shell学习-基础篇
  15. #Sora#peewee plus celery = ?
  16. 用PyCharm连接远程服务器,设置Python解释器时fail to connect解决办法
  17. git.exe百度云链接及在官网下载总是失败的解决方法
  18. 连续相乘计算机公式,Excel中如何批量算乘法?一个公式即可搞定所有乘法!
  19. html 双 直线 公文,公文排版格式(二)
  20. canvas+websocket+vue做一个完整的你画我猜小游戏

热门文章

  1. macbook重装系统 选择方案_Mac重装系统教程(二):网络在线重装系统
  2. 怎么用PDF裁剪工具来裁剪PDF页面
  3. OMNeT++下载、安装及实例tictoc1-tictoc18
  4. 教学流程图怎么画?画流程图好用的软件
  5. 深度思考比勤奋更重要
  6. 原型工具Axure6.5的使用
  7. MyBatis核心流程三大阶段之初始化阶段
  8. 20155304《网络对抗》信息搜集与漏洞扫描
  9. 了解局域网和广域网的概念差异
  10. Uni-app 小程序 App 的广告变现之路:全屏视频广告