Java 重写 ( Override )

1、重写是发生在继承当中,子类想改变这个方法的功能而进行的(我这么认为的)。

2、方法的重写规则

  1. 参数列表必须完全与被重写方法的相同
  2. 返回类型必须完全与被重写方法的返回类型相同
  3. 声明为 final 的方法不能被重写
  4. 声明为 static 的方法不能被重写,但是能够被再次声明。(这里就算你在子类中重写了,也无法调用,用的时候还是用的父类的)
  5. 父类的成员方法只能被它的子类重写
  6. 访问权限不能比父类中被重写的方法的访问权限更低。(至少要有和父亲一样的宽宏的胸怀,这里的访问权限指的是被访问修饰符修饰的权限)
  7. 构造方法不能被重写(构造方法和方法是两种不同的东西~)
  8. 如果不能继承一个方法,就不能重写这个方法。
  9. 子类和父类在同一个包中,那么子类可以重写父类中 除了 声明为 private 和 final 的所有方法
  10. 子类和父类不在同一个包中,那么子类 只能 重写父类中的声明为 public 和 protected 的非 final 方法
  11. 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。(这个,我还没怎么试过。)

Java 重载 ( Overload )

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

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

3、常用于构造器的重载。

4、重载的规则:

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

Java 重载 与 重写 的区别 ?

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

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

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