杭州 高端网站建设,南宁网上房地产官网,网站设计方案案例,推荐的网站深入理解Java中的重写和重载重载(Overloading)和重写(Overriding)是Java中两个比较重要的概念。但是对于新手来说也比较容易混淆。本文通过两个简单的例子说明了他们之间的区别。定义重载简单说#xff0c;就是函数或者方法有同样的名称#xff0c;但是参数列表不相同的情形就是函数或者方法有同样的名称但是参数列表不相同的情形这样的同名不同参数的函数或者方法之间互相称之为重载函数或者方法。重写重写指的是在Java的子类与父类中有两个名称、参数列表都相同的方法的情况。由于他们具有相同的方法签名所以子类中的新方法将覆盖父类中原有的方法。重载 VS 重写关于重载和重写你应该知道以下几点1、重载是一个编译期概念、重写是一个运行期间概念。2、重载遵循所谓“编译期绑定”即在编译时根据参数变量的类型判断应该调用哪个方法。3、重写遵循所谓“运行期绑定”即在运行的时候根据引用变量所指向的实际对象的类型来调用方法4、因为在编译期已经确定调用哪个方法所以重载并不是多态。而重写是多态。重载只是一种语言特性是一种语法规则与多态无关与面向对象也无关。(注严格来说重载是编译时多态即静态多态。但是Java中提到的多态在不特别说明的情况下都指动态多态)重写的例子下面是一个重写的例子看完代码之后不妨猜测一下输出结果class Dog{public void bark(){System.out.println(woof );}}class Hound extends Dog{public void sniff(){System.out.println(sniff );}public void bark(){System.out.println(bowl);}}public class OverridingTest{public static void main(String [] args){Dog dog new Hound();dog.bark();}}输出结果bowl上面的例子中dog对象被定义为Dog类型。在编译期编译器会检查Dog类中是否有可访问的bark()方法只要其中包含bark()方法那么就可以编译通过。在运行期Hound对象被new出来并赋值给dog变量这时JVM是明确的知道dog变量指向的其实是Hound对象的引用。所以当dog调用bark()方法的时候就会调用Hound类中定义的bark()方法。这就是所谓的动态多态性。重写的条件参数列表必须完全与被重写方法的相同返回类型必须完全与被重写方法的返回类型相同访问级别的限制性一定不能比被重写方法的强访问级别的限制性可以比被重写方法的弱重写方法一定不能抛出新的检查异常或比被重写的方法声明的检查异常更广泛的检查异常重写的方法能够抛出更少或更有限的异常(也就是说被重写的方法声明了异常但重写的方法可以什么也不声明)不能重写被标示为final的方法如果不能继承一个方法则不能重写这个方法。重载的例子class Dog{public void bark(){System.out.println(woof );}//overloading methodpublic void bark(int num){for(int i0; iSystem.out.println(woof );}}上面的代码中定义了两个bark方法一个是没有参数的bark方法另外一个是包含一个int类型参数的bark方法。在编译期编译期可以根据方法签名(方法名和参数情况)情况确定哪个方法被调用。重载的条件被重载的方法必须改变参数列表被重载的方法可以改变返回类型被重载的方法可以改变访问修饰符被重载的方法可以声明新的或更广的检查异常方法能够在同一个类中或者在一个子类中被重载。