Java基础--重写和重载

重写(Overriding)

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。重写有以下规则:

  1. 子类覆盖方法必须和父类有相同的函数名和参数。
  2. 子类的返回值和父类的返回值可以不同,但必须是父类返回值的派生类(jdk7及更高版本可以不同)。
  3. 子类抛出的异常必须比父类的异常范围小。
  4. 子类方法的访问权限必须比父类大(public>protected)
  5. 声明为final,static的方法不能被重写,但static的方法能够被再次声明。
  6. 子类和父类在同个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。若不在同一个包中,则子类只能重写父类中声明为public和protected的非final方法。
  7. 构造方法不能被重写。

重载(Overloading)

重载时在一个类里,方法名字相同而参数不同。返回类型可以相同也可以不同。每个重载的方法都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。重载有以下规则:

  1. 被重载的方法必须改变参数列表(参数个数或类型不一样)。
  2. 被重载的方法可以改变返回类型。
  3. 被重载的方法可以改变访问修饰符。
  4. 被重载的方法可以声明新的或更广的检查异常。
  5. 方法能够在同一个类中或者一个子类中被重载。
  6. 无法单纯以返回值类型作为重载函数的区分标准。

重写和重载的区别

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

super关键字

在重写中会经常使用super这个关键字,那么为什么要使用super关键字?

  1. 子类中要访问父类的方法或变量。
  2. 子类中调用父类的构造器。

super使用的注意事项:

  1. 只能在构造方法或实例方法内使用super关键字,在静态方法和静态代码块里不能使用super关键字。
  2. 在子类构造方法中如果没有使用this关键字,会隐式调用父类的无参构造方法。
  3. 构造方法中this关键字和super关键字不能同时出现。

猜你喜欢

转载自blog.csdn.net/Wyong9802/article/details/93159719
今日推荐