重写和重载有什么区别

面向对象的三大特性:继承多态封装

重写和重载有什么区别是面试中经常遇到的一个问题
重载(overLoading)

方法重载就是让类用统一的方式处理不同类型的数据的一种手段,函数名相同参数类型参数个数不相同。返回值的类型可以相同也可以不相同,无法以返回值的类型作为是否是函数重载的判断,可以抛出不同的异常,调用方法的时候,通过传递给他们不同的参数个数和参数类型来决定具体使用哪个方法,是类中多态性的表现
重写overriding
重写是子类和父类多态性的表现,是子类重写父类的方法。子类重写父类的方法与父类中的方法有相同的方法名,返回类型和参数列表子类函数的访问修饰符大于等于父类,重写方法不能抛出新的检查异常或者比重写方法更加宽泛的检查异常

重载的规则:
参数类型参数个数返回类型可以不同,可以有不同的访问修饰符,可以抛出不同的异常
重写规则:
参数列表和返回类型必须与被重写的方法一致,重写的方法的访问权限要大于等于被写方法的权限,不能抛出新的检查异常或者更加宽泛的异常,比如父类方法中声明了一个检查异常是IOException,在重写这个方法的时候就不能重新抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常

重写和重载的相同点都是多态性的一种体现,重载体现的类中的多态性,又叫静态多态性,如实现静态绑定,重写体现的是子类和父类之间的多态性又叫动态多态性,如实现动态多态性

构造方法中能否重写,构造方法肯定不能重写
构造方法肯定不能重写,构造方法的名称与类名相同,重写是子类重写父类的方法,重写的方法名列表返回类型都不变。如果重写父类的构造方法,则构造方法应该与父类相同,违背了构造方法名称与类名相同的原则,因此java的构造方法是不能重写的
构造方法能够重载,当然能够重载
能否被重载?重载指的是在同一个类中的多态性的体现,当然可以重载

使用重载重写方法的时候需要注意,不过是重写重载方法,普通方法也是,使用方法的时候,参数的个数和数据类型要一样

你可能感兴趣的:(重写和重载有什么区别)