Java 方法重载(Overload) 与 方法覆盖(重写Override)
Java 方法重载(Overload) 与 方法覆盖(重写Override)
1、方法重载(Overload)
对于类的方法(包括从父类中继承的方法),如果有两个方法的方法名相同,但是参数不一致,那么可以说,一个方法是另一个方法的重载方法。在一个类中不允许定义两个方法名相同,并且参数类型也相同的方法。
重载方法必须满足以下条件:
- 方法名相同。
- 方法的参数类型、个数、顺序至少有一个不同。
- 方法的返回类型、修饰符可以不相同。
2、方法覆盖(Override)
如果在子类中定义的一个方法,其方法名称、返回类型及参数签名正好和父类中的某个方法的名称、返回类型以及参数签名一致,那么可以说,子类的方法覆盖了父类的方法。
覆盖方法必须满足多种约束:
- 子类方法的方法名称、参数签名和返回类型必须父类的方法的名称、参数签名和返回类型一致。。
- 子类不能缩小父类的访问权限。
- 子类不能抛出比父类更多的异常。
- 方法覆盖只存在于子类和父类之间(包括直接父类和间接父类)。
- 子类可以定义和父类一样的静态方法。以便在子类中隐藏父类的静态方法。子类隐藏父类的静态方法和子类覆盖父类的实例方法,这两者的区别在于: 运行时, java虚拟机把静态方法和所属的类绑定, 而把实例和所属的实例绑定。
- 父类的非静态方法不能被子类覆盖为静态方法。
- 父类的私有方法不能被子类覆盖。
- 父类的抽象方法可以被子类通过两种方法覆盖: 一是子类实现父类的抽象方法; 二是子类重新申明父类的抽象方法。