zoukankan      html  css  js  c++  java
  • Java-重载和重写区别剖析

      重载(Overload)和重写(Override)是任何一门面向对象的语言都会具有的两个特性,自然,Java语言中也具有此两种特性。但是,对于Java新手,或者没有面向对象语言经验的开发者而言,这会是两个容易混淆和迷糊的特性。本文将由浅入深,以示例代码的方式详解此两种特性的区别。

    定义

      重载是指一个类中具有两个或者两个以上,具有相同方法名和不同参数的方法。

      重写是指两个具有相同方法名和相同参数的方法(方法签名),其中一个方法在父类中,另一个却存在于子类中。重写的机制使得对于父类中已经提供的方法,子类可以提供实现了特定逻辑的同名同参方法来屏蔽它。

    重载 VS 重写

      关于重载与重写,我们需要知道的重点有:

    1. 对于两个 重写 的方法而言,JVM会在 运行时 根据对象的实际Class类型,而不是引用该对象的变量的Class类型,来决定实际调用哪个重写的方法。同时,对于多个 重载 的方法而言,Java编译器会在 编译时 根据引用该对象的变量的Class类型,来决定调用哪个重载的方法。
    2. 面向对象语言的三大特性之一的 多态 就是依赖于重写机制。
    3. 重写方法在运行时做判断;重载方法在编译时做判断。

    重写

      首先,我们看一个关于重写的例子。

     1 class Dog {
     2 public void bark() {
     3 System.out.println(“www.tiantianbianma.com”);
     4 }
     5 }
     6 class Hound extends Dog {
     7 public void sniff() {
     8 System.out.println(“好好学习”);
     9 }
    10 public void bark() {
    11 System.out.println(“天天编码”);
    12 }
    13 }
    14 public class OverrideTest {
    15 public static void main(String[] args) {
    16 Dog dog = new Hound();
    17 dog.bark();
    18 }
    19 }

    建议读者仔细思考得出答案后,再实际上机验证答案。正确的答案是:天天编码

    上述代码中,这个 dog 变量被声明为 Dog 类型。在代码编译时,Java编译器检查 Dog 类型是否具有 bark() 方法。因为 Dog 类是具有 bark() 方法的,所以代码能正确编译。在代码运行时,一个 Hound 类型的对象被创建,并将其引用赋值给了 dog 变量,JVM知道 dog 变量是引用到了一个 Hound 类型的对象,所以真正调用的是 Hound 类的 bark() 方法。这也就是 多态 机制的原理。

    重载

    首先,我们还是看一个关于重载的代码示例:

     1 class Dog {
     2 public void bark() {
     3 System.out.println(“www.tiantianbianma.com”);
     4 }
     5 public void bark(int num) {
     6 for (int i = 0; i < num; i++) {
     7 System.out.println(“天天编码”);
     8 }
     9 }
    10 }

    在这个示例代码中,通过使用不同的调用参数,Dog 类的两个 bark 方法都可以被调用。在编译时,编译器就可以根据参数的类型或者个数等信息区分出它们,从而决定实际该调用哪个方法。

    参考资料:http://www.tiantianbianma.com/java-overload-override.html/

  • 相关阅读:
    [ jquery 选择器 :hidden ] 此方法选取匹配所有不可见元素,或者type为hidden的元素
    剑指 Offer 03. 数组中重复的数字 哈希
    LeetCode 1736. 替换隐藏数字得到的最晚时间 贪心
    Leetcode 1552. 两球之间的磁力 二分
    Leetcode 88. 合并两个有序数组 双指针
    LeetCode 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?
    LeetCode 1743. 相邻元素对还原数组 哈希
    LeetCode 1745. 回文串分割 IV dp
    剑指 Offer 47. 礼物的最大价值 dp
    剑指 Offer 33. 二叉搜索树的后序遍历序列 树的遍历
  • 原文地址:https://www.cnblogs.com/lemaden/p/10141375.html
Copyright © 2011-2022 走看看