覆盖方法必须满足多种约束:
1.子类方法的名称、参数签名和返回类型必须与父类方法的名称、参数签名和返回类型一致
2.子类方法不能缩小父类方法的访问权限。但访问权限可扩大。比如由默认到public。
3.子类方法不能抛出比父类方法更多的异常。但可以抛出比父类更少的异常,或不抛出异常。
4.方法覆盖只存在于子类和父类之间。在同一个类中只能被重载,不能被覆盖。
5.父类的静态方法不能被子类覆盖为非静态方法。
6.静态方法不能被覆盖,但子类可以定义和父类一样的静态方法,但只是相当于子类新定义了一个方法。
7.父类的私有方法不能被子类覆盖。
8.父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的抽象方法;二是子类重新声明父类的抽象方法
9.父类的非抽象方法可以被覆盖为抽象方法。