重写(Overriding)和重载(Overloading)是面向对象编程中两个重要的概念,它们在实现多态性时起着关键作用,但两者之间有明显的区别:
重载(Overloading)
-
定义 :重载是在同一个类中,方法名相同但参数列表不同(参数的个数、类型或顺序不同)。
-
规则 :
-
必须具有不同的参数列表。
-
可以有不同的访问修饰符。
-
可以抛出不同的异常。
-
类的关系 :重载是同一个类内部方法之间的关系,体现类接口的多样性。
-
发生时机 :重载是编译时多态(静态多态)。
重写(Overriding)
-
定义 :重写发生在子类和父类之间,子类定义了一个与父类中同名、同参数列表、同返回类型的方法,并且访问权限不能低于父类中的方法。
-
规则 :
-
参数列表必须完全与被重写的方法相同。
-
返回的类型必须与被重写的方法的返回类型相同。
-
访问修饰符的限制必须大于被重写方法的访问修饰符。
-
重写方法一定不能抛出新的检查异常或者比被重写方法声明更加宽泛的检查型异常。
-
类的关系 :重写是子类和父类之间的关系,体现类行为的继承与变化。
-
发生时机 :重写是运行时多态(动态多态)。
总结
-
重载 关注同一个类中方法名的多样性,通过不同的参数列表实现。
-
重写 关注子类对父类方法的继承和修改,要求方法名和参数列表相同,返回类型和访问权限有特定要求。
希望这能帮助你理解重写和重载的区别