重载和重写的区别

重载

1、发生在同一个类中,方法名必须相同,必须具有不同的参数列表(参数类型/个数/顺序);
2、可以有不同的返回类型;
3、可以有不同的访问修饰符;
4、可以抛出不同的异常;
5、发生在编译时期;

重写

1、发生在父子类中;
2、方法名、参数列表必须相同;
3、返回值范围小于等于父类;
4、抛出的异常范围小于等于父类,
5、访问修饰符范围大于等于父类;
6、如果父类方法访问修饰符为 private 则子类就不能重写该方法;
7、子类中不能重写父类中的final方法 ;
8、子类中必须重写父类中的abstract方法

**面试题:重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分? **
答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。

posted @ 2019-03-26 20:10  w小宏  阅读(444)  评论(0编辑  收藏  举报