1.重载

重载:方法名相同,参数列表不同的多个同名函数
参数列表不同的含义:参数类型、参数个数、参数顺序至少有一个不同
*重点是看方法名和参数列表

2.覆盖(重写)

当父类中的某些方法不能满足要求时,子类中改写父类的方法。当父类中的方法被覆盖了后,除非用super关键字,否则就无法再调用父类中的方法了。

发生覆盖的条件:

  1. “三同一不低” 子类和父类的方法名称,参数列表,返回类型必须完全相同,而且子类方法的访问修饰符的权限不能比父类低
  2. 子类方法不能抛出比父类方法更多的异常。即子类方法所抛出的异常必须和父类方法所抛出的异常一致,或者是其子类,或者什么也不抛出;
  3. 被覆盖的方法不能是final类型的。因为final修饰的方法是无法覆盖的。
  4. 被覆盖的方法不能为private。否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
  5. 被覆盖的方法不能为static。所以如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足覆盖条件,那么会发生编译错误。反之亦然。即使父类和子类中的方法都是静态的,并且满足覆盖条件,但是仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。

方法的覆盖和重载具有以下相同点:

  • 都要求方法同名
  • 都可以用于抽象方法和非抽象方法之间

方法的覆盖和重载具有以下不同点:

  • 方法覆盖要求参数列表(参数签名)必须一致,而方法重载要求参数列表必须不一致。
  • 方法覆盖要求返回类型必须一致,方法重载对此没有要求。
  • 方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类中的所有方法(包括从父类中继承而来的方法)
  • 方法覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制。
  • 父类的一个方法只能被子类覆盖一次,而一个方法可以在所有的类中可以被重载多次。

另外,对于属性(成员变量)而言,是不能重载的,只能覆盖。
转载自:http://blog.csdn.net/lenotang/article/details/2681525