"方法重写"与"方法重载"的细节区别?

JavaSE入门 专栏收录该内容
7 篇文章 0 订阅

"方法重写"与"方法重载"的细节区别?

一、方法重写(Override)

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

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

重写体现了Java优越性,重写是建立在继承关系上,它使语言结构更加丰富。在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法。

在Java中覆盖继承父类的方法就是通过方法的重写来实现的。所谓方法的重写是指子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型。

这样,就可以实现对父类方法的覆盖。如果子类将父类中的方法重写了,调用的时候肯定是调用被重写过的方法,那么如果现在一定要调用父类中的方法该怎么办呢?

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

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

重写规则:

在重写方法时,需要遵循以下的规则:

  1. 父类方法的参数列表必须完全与被子类重写的方法的参数列表相同。
  2. 父类的返回类型必须与被子类重写的方法返回类型相同。
  3. 父类方法的访问权限不能是private权限修饰符,被private修饰后的父类方法,只能被父类自己访问,子类不能重写,也不能被外部类访问。 子类重写父类的方法后,子类重写的方法权限修饰符不能低于父类权限修饰,否则程序会报错。
    父类方法权限修饰符为private,如果写了和父类方法名一致的方法,不是重写,是子类自己的特有方法。
  4. 如果父类中的方法用**"static"关键字**修饰,子类定义了一个与父类方法名一致的方法,这不是方法的重写.
  5. 在继承过程中如果父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常,
    而且抛出的异常不能多于父类中抛出的异常(可以等于父类中抛出的异常)。换句话说,重写方法一定不能抛出新的检查异常,或者比被重写方法声明更加宽泛的检查型异常。例如,父类的一个方法申明了一个检查异常IOException,在重写这个方法时就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。

二、方法重载(Overload)**

  • 方法重载是让类以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法,这就是多态性。
  • 所谓方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。
  • 方法的重载在实际应用中也会经常用到。不仅是一般的方法,构造方法也可以重载。在方法重载时,方法之间需要存在一定的联系,因为这样可以提高程序的可读性,一般只重载功能相似的方法。重载是指我们可以定义一些名称相同的方法,通过定义不同的参数来区分这些方法,然后再调用时,Java虚拟机就会根据不同的参数列表来选择合适的方法执行。也就是说,当一个重载方法被调用时,Java用参数的类型或个数来决定实际调用的重载方法。
  • 因此,每个重载方法的参数的类型或个数必须是不同。虽然每个重载方法可以有不同的返回类型,但返回类型并不足以区分所使用的是哪个方法。
  • 当Java调用一个重载方法是,参数与调用参数匹配的方法被执行。在使用重载要注意以下的几点:
  1. 方法名要相同
  2. 在使用重载时只能通过不同的参数列表,
  3. 访问权限、返回类型、抛出的异常、方法的异常类型和数目等不同都是重载。
  4. 方法重载允许抛出不同的异常。
    参数列表不同包括:
    a.参数的类型不同
    b.参数的数目不同
    c.参数的位置不同(如果参数里的类型一致时,位置不同不算重载)
public class Demo {

    public static void method(int a, int b) {

    }

//    public static void method(int b, int a) {
//
//    }
}
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值