下载后可任意编辑重写和重载的三点区别:重载和重写的区别 重载(Overloading)和重写(Overriding)是 Java 中两个比较重要的概念。但是对于新手来说也比较容易混淆。下面是我为大家准备的重写和重载的区别,希望大家喜爱! 重写和重载的区别一:定义 重载 简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。 重写 重写指的是在 Java 的子类与父类中有两个名称、参数列表都相同的方法的情况。由于他们具有相同的方法签名,所以子类中的新方法将覆盖父类中原有的方法。 第 1 页 共 7 页下载后可任意编辑 重写和重载的区别二:相关知识 关于重载和重写,你应该知道以下几点: 1、重载是一个编译期概念、重写是一个运行期间概念。 2、重载遵循所谓“编译期绑定”,即在编译时根据参数变量的类型推断应该调用哪个方法。 3、重写遵循所谓“运行期绑定”,即在运行的时候,根据引用变量所指向的实际对象的类型来调用方法 4、因为在编译期已经确定调用哪个方法,所以重载并不是多态。而重写是多态。重载只是一种语言特性,是一种语法规则,与多态无关,与面对对象也无关。(注:严格来说,重载是编译时多态,即静态多态。但是,Java 中提到的多态,在不特别说明的情况下都指动态多态) 重写和重载的区别三:对比 重写的例子 第 2 页 共 7 页下载后可任意编辑 下面是一个重写的例子,看完代码之后不妨猜想一下输出结果: classDog{ publicvoidbark(){ System.out.println("woof"); } } classHoundextendsDog{ publicvoidsniff(){ System.out.println("sniff"); } publicvoidbark(){ System.out.println("bowl"); } 第 3 页 共 7 页下载后可任意编辑 } publicclassOverridingTest{ publicstaticvoidmain(String[]args){ Dogdog=newHound(); dog.bark(); } } 输出结果: bowl 上面的例子中,dog 对象被定义为 Dog 类型。在编译期,编译器会检查 Dog 类中是否有可访问的 bark()方法,只要其中包含 bark()方法,那么就可以编译通过。在运行期,Hound 对象被 new 出来,并赋值给 dog 变量,这时,JVM 是明确的知道 dog变量指向的其实是 Hound 对象的引用。所以,当 dog 调用第 4 页 共 7 页下载后可任意编辑bark()方法的时候,就会调用 Hound 类中定义的 bark()方法。这就是所谓的动态多态...