如果在子类中定义了一个方法,其名称、返回类型及参数正好与父类中的某个方法的名称、返回类型及参数匹配,那么就是说,子类的方法覆盖了父类的方法。
覆盖方法必须满足下面的多种约束。
1,子类方法的名称、参数名和返回类型必须与父类的名称、参数类型和返回类型一致。
2,子类不能缩小父类方法的访问权限。
3,子类不能抛出比父类方法更多的异常。
4,方法覆盖只存在于父类和子类(包括直接父类和间接父类)之间。在同一个类中方法只能被重载,不能被覆盖。
5,父类的静态方法不能被子类覆盖为非静态方法。
6,子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法。
子类隐藏父类的静态方法和子类覆盖父类的实例方法,两者的区别在于:运行时,Java虚拟机把静态方法和所属绑定,而把实例方法和所属的实例绑定。
7,父类的非静态方法不能被子类覆盖为静态方法。
8,父类的私有方法不能被子类覆盖。
9,父类的抽象方法可以被子类通过两种途径覆盖:一种是子类实现父类的抽象方法;另一种是子类重新声明父类的抽象方法。
10,父类的非抽象方法可以被覆盖为抽象方法。
-------摘录自《Java程序员生存手册--为自己赢得一份IT名企职位》人民邮电报社2010