当前位置: 首页 > 科技观察

浅谈Java中重写和重载的区别

时间:2023-03-21 14:10:26 科技观察

覆盖(Override)覆盖是子类重写允许访问父类的方法的实现过程,返回值和形参不能改变。即外壳不变,核心重写!重写的好处是子类可以根据需要定义自己的特定行为。也就是说,子类可以根据需要实现父类的方法。覆盖方法不能抛出新的已检查异常或比被覆盖方法声明的异常更宽的异常。例如:父类的一个方法声明了一个检查异常IOException,但是改写这个方法时不能抛出Exception,因为Exception是IOException的父类,只能抛出IOException的子类异常。重写规则参数列表必须与重写方法的参数列表相同。返回类型可以和重写方法的返回类型不同,但必须是父类返回值的派生类(java5及之前版本的返回类型必须相同,java7及以后版本可以有所不同)。访问权限不能低于父类中重写方法的访问权限。例如:如果父类的一个方法声明为public,那么重写子类中的方法就不能声明为protected。超类的成员方法只能被其子类覆盖。不能重写声明为final的方法。声明为静态的方法不能被覆盖,但可以重新声明。如果子类和父类在同一个包中,那么子类可以覆盖父类的所有方法,除了声明为private和final的方法。如果子类和父类不在同一个包中,则子类只能覆盖父类声明为public和protected的非final方法。被覆盖的方法可以抛出任何非强制异常,无论被覆盖的方法是否抛出异常。但是,被覆盖的方法不能抛出新的强制性异常,或者比被覆盖的方法声明的范围更宽的强制性异常,反之亦然。构造函数不能被覆盖。如果你不能继承一个类,你就不能覆盖那个类的方法。重载(Overload)重载(overloading)是在一个类中,方法名相同,只是参数不同。返回类型可以相同或不同。每个重载方法(或构造函数)都必须有一个唯一的参数类型列表。最常用的地方就是构造函数重载。重载规则:重载的方法必须改变参数列表(参数的数量或类型不同);重载方法可以改变返回类型;重载方法可以改变访问修饰符;重载方法可以声明新的或更广泛的检查异常;方法可以在同一个类或子类中被覆盖。返回值类型不能作为区分重载函数的标准。重写和重载的区别总结方法重写(Overriding)和重载(Overloading)是java多态的不同表现,重写是父类和子类之间多态的一种表现,重载可以理解为多态的具体表现.(1)方法重载是指在一个类中定义了多个同名方法,但其参数个数不同或个数相同但类型和顺序不同,称为方法重载(Overloading)。(2)方法重写是子类中的方法名与父类中的方法名相同,参数个数和类型相同,返回值相同的方法,称为压倒一切。(3)方法重载是类的多态表现,方法重写是子类和父类的多态表现。