资讯专栏INFORMATION COLUMN

10. java 重写和重载

YorkChen / 1428人阅读

摘要:重写继承的主要特性是子类可以根据父类已有功能的基础上进行扩展,但是也有可能对父类的属性和方法进行重写覆写。方法的重写当子类定义了与父类方法名称相同,参数列表相同以及返回值相同时,我们称之为方法的重写。

重写(Override)

继承的主要特性是子类可以根据父类已有功能的基础上进行扩展,但是也有可能对父类的属性和方法进行重写/覆写。

方法的重写

当子类定义了与父类方法名称相同,参数列表相同以及返回值相同时,我们称之为方法的重写。

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

方法的重写规则

参数列表必须完全与被重写方法的相同;

返回类型必须完全与被重写方法的返回类型相同;

访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。

父类的成员方法只能被它的子类重写。

声明为final的方法不能被重写。

声明为static的方法不能被重写,但是能够被再次声明。

子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。

子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。

重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。

构造方法不能被重写。

如果不能继承一个方法,则不能重写这个方法。

重载(Overload)

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

重载规则:

被重载的方法必须改变参数列表(参数个数或类型不一样);

被重载的方法可以改变返回类型,但无法以返回值类型作为重载函数的区分标准。

被重载的方法可以改变访问修饰符;

被重载的方法可以声明新的或更广的检查异常;

方法能够在同一个类中或者在一个子类中被重载。

重写与重载之间的区别
区别点 重载(Overload) 重写(Override)
参数列表 必须修改 不能修改
返回类型 可以修改 不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
权限 可以修改 一定不能做更严格的限制(可以降低限制)
总结

方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。

方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。

方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73553.html

相关文章

  • JVM执行方法调用(一)- 重载重写

    摘要:重写语言中的定义子类方法有一个方法与父类方法的名字相同且参数类型相同。父类方法的返回值可以替换掉子类方法的返回值。思维导图参考文档极客时间深入拆解虚拟机是如何执行方法调用的上广告 原文 回顾Java语言中的重载与重写,并且看看JVM是怎么处理它们的。 重载Overload 定义: 在同一个类中有多个方法,它们的名字相同,但是参数类型不同。 或者,父子类中,子类有一个方法与父类非私有方...

    韩冰 评论0 收藏0
  • 从jvm角度看懂类初始化、方法重载重写

    摘要:对应的代码接下来的句是关键部分,两句分分别把刚刚创建的两个对象的引用压到栈顶。所以虽然指令的调用是相同的,但行调用方法时,此时栈顶存放的对象引用是,行则是。这,就是语言中方法重写的本质。 类初始化 在讲类的初始化之前,我们先来大概了解一下类的声明周期。如下图 类的声明周期可以分为7个阶段,但今天我们只讲初始化阶段。我们我觉得出来使用和卸载阶段外,初始化阶段是最贴近我们平时学的,也是笔试...

    tinyq 评论0 收藏0
  • 【金三银四】面试题之java基础

    摘要:中,任何未处理的受检查异常强制在子句中声明。运行时多态是面向对象最精髓的东西,要实现运行时多态需要方法重写子类继承父类并重写父类中已 1、简述Java程序编译和运行的过程:答:① Java编译程序将Java源程序翻译为JVM可执行代码--字节码,创建完源文件之后,程序会先被编译成 .class 文件。② 在编译好的java程序得到.class文件后,使用命令java 运行这个 .c...

    Yangyang 评论0 收藏0
  • 【金三银四】面试题之java基础

    摘要:中,任何未处理的受检查异常强制在子句中声明。运行时多态是面向对象最精髓的东西,要实现运行时多态需要方法重写子类继承父类并重写父类中已 1、简述Java程序编译和运行的过程:答:① Java编译程序将Java源程序翻译为JVM可执行代码--字节码,创建完源文件之后,程序会先被编译成 .class 文件。② 在编译好的java程序得到.class文件后,使用命令java 运行这个 .c...

    Barrior 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<