Java之重写

Java 重写(Override)

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

2.重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。

3.重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如:父类的一个方法申明了一个检查异常 IOException(后期章节会讲到),但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。

在面向对象原则里,重写意味着可以重写任何现有方法。实例如下:

在上面的例子中可以看到,尽管dog属于Animal类型,但是它运行的是Dog类的sleep方法。

这是由于在编译阶段,只是检查参数的引用类型。然而在运行时,Java虚拟机(JVM)指定对象的类型并且运行该对象的方法。

因此在上面的例子中,之所以能编译成功,是因为Animal类中存在sleep方法,然而运行时,运行的是特定对象的方法。也就是dog类中的sleep方法。

super关键字

以上使用了super关键字 。super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。

除了Object类之外其他所有类的构造方法第一句总是super(…)

任何类的构造方法中,若是构造方法的第一行代码没有显式的调用super(...);那么Java默认都会调用super(); 所以你这里的super(); 加不加都无所谓。

例如:Dog类重写了父类的sleep方法,那么在子类中还想调用父类方法怎么办呢?

只需要在Dog类中的任意方法中使用super.sleep()即可。

Object类

Object类是所有Java类的根基类,如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类 ,并且继承了该类的所有方法,以下的方法大家简单记住几个即可。

toString方法:其返回值是 String 类型,描述当前对象的有关信息。该方法一般都会在子类重写。

equals方法:提供定义对象是否“相等”的逻辑。x.equals ( y ) 当 x 和 y是同一个对象的应用时返回 true 否则返回 false。

有兴趣的大家可以去看看这2个方法的源码非常简单。

后续需要使用在讲解。

重写与重载之间的区别

首先看一张图

重点

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

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

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

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

习题:

动物类:方法(睡,跑)

企鹅类:继承动物类并且重写跑的方法打印“一晃一晃的跑”

老鼠类:继承动物类并且重写睡的方法打印“趴着睡觉”

本文分享自微信公众号 - Java研发军团(ityuancheng)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券