java多态的2种表现形式 方法重载和方法覆盖
方法重载:同一个类中,方法名相同,参数列表不同的2个或多个方法构成方法的重载。
方法覆盖:子类重新实现了父类中的方法。
方法重载
- /**
- * 方法重载满足的条件
- * 同一个类中,方法名相同,参数列表不同的2个或多个方法构成方法的重载
- * 参数列表不同指参数的类型,参数的个数,参数的顺序至少一项不同
- * 方法的返回值类型,方法的修饰符可以不同。
- */
- public class Overload{
- public static void overLoad(int i){
- System.out.println(i);
- }
- /* 下面方法都与第一个方法public static void overLoad(int i)相比较*/
- //public int overLoad(int k){}//错误,参数列表相同
- //返回值类型不相同
- public int overLoad(int i,int k){
- return 0;
- }
- //修饰符不同
- private void overLoad(double d){
- }
- //修饰符,返回值类型都不同
- private double overLoad(double d,int k){
- return 0;
- }
- }
方法覆盖
- /**
- * 方法覆盖指子类重新实现了父类中的方法
- * 方法覆盖约束条件:
- * 1.子类的方法名称,参数列表,返回值类型必须与父类中方法的名称,参数列表,返回值类型一致
- * 2.子类方法不能缩小父类方法的访问权限,但可以扩大
- * 3.子类方法不能抛出比父类方法更多的异常,可以不抛出异常
- */
- public class Override{
- }
- class Exception1 extends Exception{}
- class Exception2 extends Exception1{}
- class Exception3 extends Exception2{}
- class Parent{
- void method() throws Exception2{}
- }
- class Son extends Parent{
- //private void method(){}//错误,缩小了父类方法的访问权限
- //int method(){} //错误,方法返回值与父类方法不一致
- void method(int k){} //通过编译,但不与父类的方法method()构成覆盖
- //public void method() throws Exception1{}//错误 抛出比父类更多的异常
- //public void method(){} //正确 扩大父类方法的访问权限,不抛出异常
- //void method() throws Exception3{}; //正确 抛出的异常比父类抛出的异常小
- public void method() throws Exception3{}
- }