java重写与重载的区别!
在学习java的过程中我发现自己很容易忘掉前几天刚学的知识点,所以边学便总结所学的知识是很重要的。之所以写重写与重载的区别是因为面试中经常被问到,写一篇博客总结也算对于自己java的学习做个记录。
1.重写(Override)
重写(Override):一般表示在父类与子类之间的关系,其具体表现为子类与父类的方法名相同,参数相同,返回类型相同,但具体实现不同。
重写的特征:
1.发生在父类与子类之间
2.方法名,参数类型,返回类型(除了子类的返回类型是父类返回类型的子类)必须相同。
3.访问修饰符的限制一定要大于被重写的访问修饰符(public>protected>defalut>private)。
4.重写方法一定不能抛出新的检查异常或者是比被重写的方法更宽广的检查型异常。
5.构造方法不能被重写。
2.重载(Overload)
重载(Overload):在一个类中同名的方法但参数列表不同(参数个数不同,参数类型不同甚至是参数顺序不同都会被视为重载),重载对于返回类型是没有要求的,可以相同也可以不同。
1.发生在同一个类中。
2.方法名相同,参数列表不同(参数个数不同,参数类型不同甚至是参数顺序不同)。
3.无法以返回类型作为重载的区分标准。
总结: 重载与重写的区别
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。