重写(overriding)和重载(overloading)是Java中两个非常重要的概念。它们使Java新手程序员感到困惑。这篇文章通过使用两个简单的示例来说明它们之间的差异。

1.定义
重写:重写表示具有两个具有相同方法名称和参数(即方法签名)的方法。一种方法在父类中,另一种在子类中。重写允许子类提供已经为其父类提供的方法的特定实现。(同名同参不同类)
重载:当一个类中的两个或多个方法具有相同的方法名称但参数不同时,就会发生重载。(同名同类不同参)
2. 重写与重载的比较
以下是有关重写和重载的一些重要事实:
1)运行时的实际对象类型,而不是引用变量的类型,决定了在运行时使用哪种重写方法。相反,引用类型确定在编译时将使用哪种重载方法。
2)多态性适用于重写,而不适用于重载。
3)重写是一个运行时概念,而重载是一个编译时概念。
3. 重写的例子
这是重写的示例。阅读代码后,猜测输出。

在上面的示例中,dog变量被声明为Dog。在编译期间,编译器检查Dog类是否具有bark()方法。只要Dog类具有bark()方法,代码编译器即可。在运行时,将创建一个猎犬并将其分配给dog。 JVM知道dog在引用Hound的对象,因此它调用Hound的bark()方法。这称为动态多态性。
4. 重载的例子

在此重载示例中,可以通过使用不同的参数来调用两个树皮方法。编译器知道它们是不同的,因为它们具有不同的方法签名(方法名称和方法参数列表)。
网友评论