`
wa1992mo
  • 浏览: 3854 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

重写和重载

 
阅读更多
一、只要拥有一个继承超类方法的类,就有机会重写该方法(除非方法被标识为final或static)。重写的主要好处是具有能够定义某个子类型特定行为的能力。
        以下是重写方法的规则:
        1. 参数列表必须与被重写的方法的参数列表完全匹配,或者就成重载了;
        2. 返回类型必须与超类中被重写方法原先声明的返回类型或其子类型相同;
        3. 访问级别的限制性一定不能比被重写方法的更严格(如public->private);
        4. 访问级别的限制性可以比被重写方法的弱;
        5. 仅当实例方法被子类继承时,它们才能被重写。(与超类位于相同包内的子类可以重写未标识为private或final的任何超类方法;不同包中的子类只能重写那些标识为public或protected的非final方法。)
        6. 重与方法可以抛出任何示检验(运行时)异常,无论被重写方法是否声明了该异常;
        7. 重与方法一一不能抛出比被重写方法声明的检验异常更新或更广的检验异常。(例如,一个声明FileNotFoundException异常的方法不能被一个声明SQLException、Exception或任何其他非运行时异常的方法重写,除非它是FileNotFoundException的一个子类;
        8. 重写方法能够抛出更少或更有限的异常。仅仅因为被重写方法“承担风险”,并不意味着重写子类的异常会承担同样的风险。关键之处是:不管被重写方法声明了什么异常,重写方法都不必声明它从不会抛出的任何异常;
        9. 不能重写标识为final或static的方法;
        10. 如果方法不能被继承,就不能被重写。

二、重载方法允许在类中复用相同的方法名称,但是具有不同的参数(并可以选择不同的返回类型)。重载一个方法往往意味着对那些调用方法的人更加友好,因为你的代码承担起处理不同参数类型的责任,而不用强制要求调用程序在调用方法之前进行了转换。
        重载的规则相对简单:
        1. 重载方法必须改变参数列表;
        2. 重载方法可以改变返回类型;
        3. 重载方法可以改变访问修饰符;
        4. 重载方法可以声明新的或更广的检验异常;
        5. 方法能够在同一个类或者一个子类中被重载。

三、重写和重载的区别:
        1. 参数:
重载方法:必须改变
重写方法:一定不能改变
        2. 返回类型:
重载方法:可以改变
重写方法:除协变式返回外,不能改变。
        3. 异常:
重载方法:可以改变
重写方法:可以减小或消除。一定不能抛出新的或更广的检验异常。
        4. 访问级别:
重载方法:可以改变
重写方法:一定不能执行更严格的限制(可以降低限制)。
        5. 调用:
重载方法:引用类型决定了选择哪个重载版本(基于声明的参数类型)。在编译时做出决定。调用的实际方法仍然是一个运行时发生的虚拟方法调用,但是编译器总是知道所调用方法的签名。因此在运行时,不仅是方法所在的类,而且参数匹配也已经明确。
重写方法:对象类型(也就是堆上实际的实例类型)决定了调用哪个方法在运行时做出决定。
  
        注意:对象类型(不是引用变量的类型)决定在运行时使用哪个重写方法;而引用类型则决定了在编译时使用哪个重载方法。
分享到:
评论

相关推荐

    Java重写和重载概念及区别梳理

    NULL 博文链接:https://zhycaf.iteye.com/blog/980334

    JAVA重写和重载.pdf

    JAVA重写和重载.pdf

    重写和重载的区别

    重载的条件: 1.必须在同一个类中2.方法名必须相同3.参数列表不能相同。 重写的条件: 1. 在不同的类中 2. 发生方法重写的两个方法返回值,方法名,参数列表必须完全一致 3. 子类抛出的异常不能超过父类相应的...

    重写和重载的区别.xmind

    重写和重载的区别

    cpfree#cpfree#重写和重载1

    声明为static的方法不能被重写,但是能够被再次声明。子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法

    Swift中重写和重载的使用与对比总结

    主要给大家介绍了关于Swift中重写和重载的使用方法,以及重写和重载的对比分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

    C#重写重载与多态

    重载:用于在给定了参数列表和一组候选函数成员的情况下,选择一个最佳函数成员来实施调用。多态:c#的多态性主要体现在类的继承上:子类继承父类的时候,可能出现同名但方法定义不同的情况, 所以在子类中会将原方法...

    java 函数的重载和重写实例代码

    本文主要介绍Java 的重载和重写,学习java的同学都知道Java的多态有多重要,这里给大家举例说明函数的重载和重写,希望能帮助有需要的小伙伴

    Java中继承、多态、重载和重写介绍

    主要介绍了Java中继承、多态、重载和重写介绍,需要的朋友可以参考下

    重载与覆写/重写的区别

    重载与覆写/重写的区别 区别 重载 覆写 1 单词 OverLoading Override 2 概念 方法名称相同,参数的类型或个数不同 方法名称相同,参数的类型或个数相 同,返回值类型相同 3 范围 发生在一个类之中...

    重写(override)和重载(overload)的区别

    C#中方法的重写(override)和重载(overload)的区别

    Java方法重载和重写原理区别解析

    主要介绍了Java方法重载和重写原理区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java 重写与重载方法与区别详解

    本篇文章通过实例详细介绍了重写与重载,以及他们的区别,需要的朋友可以参考下

    Java重写与重载(区别与用途)

    我根据我的理解来谈谈Java中重写方法与重载方法的区别。  重写  Java 中重写又叫覆盖,主要是指继承(extends)父类或者实现(implements)接口时将父类或者接口中已经存在的方法进行重新定义。重写的方法在父类...

    Objective-C中的重载和重写详解

    Objective-C 重载和重写 首先,Objective-C中不完全支持重载,网上很多人要么将重载和重写搞混,要么说OC不支持重载(当然按照重载严格定义说OC不支持重载也没错),事实上OC支持参数个数不同的函数重载。 问题: ...

    Java重写重载线程

    描述了重写与重载,及线程的一个例题纠错

    重写与重载.png java分析

    重写与重载.png java分析

    java中的重载和重写的区别

    主要总结了java中的重载和重写的区别,供大家理解参考,有问题可以补充

    重载,重写,覆盖,多态

    重载,重写,覆盖,多态的深刻剖析,具体分析了重载,重写,覆盖,多态之间的区别

Global site tag (gtag.js) - Google Analytics