zoukankan      html  css  js  c++  java
  • overload和override的含义和区别

    重载(overload)和重写/覆盖(override)是Java多态性的不同表现形式。

    • 重载(overload)

      (1) 重载是通过不同的方法参数来区分的,如不同的参数个数、顺序、类型。

      (2) 不能通过方法的访问权限返回值类型和抛出的异常类型来进行重载。

      (3) 对于继承来说,如果基类方法的访问权限是private,那么就不能在派生类中对其重载;如果派生类也定义了一个同名函数,这只是一个新的方法,不会达到重载的效果。

     

    • 重写/覆盖(override)

            (1) 派生类中的覆盖方法必须和基类中被覆盖的方法有相同的函数名和参数

            (2) 派生类中的覆盖方法的返回值必须和基类中被覆盖的方法的返回值相同

            (3) 派生类中的覆盖方法所抛出的异常必须和基类中被覆盖的方法所抛出的异常一致

            (4) 基类中被覆盖的方法不能为private,否则其子类只是定义了一个方法,并没有对其覆盖。

             override两同两小一大原则

             (1) 两同:方法名相同、参数类型相同

             (2) 两小: 1) 子类返回类型小于等于父类方法返回类型

                              2) 子类抛出异常小于等于父类方法抛出异常

             (3) 一大:子类访问权限大于等于父类方法访问权限

    重载与重写/覆盖的区别:

            (1) 重写/覆盖是是父类与子类之间的关系,是垂直关系;重载是同一个类中方法之间的关系,是水平关系。

            (2) 重写/覆盖只能是由一个方法或只能由一对方法产生关系;重载是多个方法之间的关系。

            (3) 重写/覆盖要求参数列表相同;重载要求参数列表不同。

            (4) 重写/覆盖关系中,调用方法体是根据对象的类型来决定;而重载关系是根据调用时的实参表与形参表来选择方法体。

  • 相关阅读:
    监控 Linux 性能的 18 个命令行工具
    VS2015中无法查找或打开 PDB 文件
    C1853 编译器错误:fatal error C1853: 'pjtname.pch' precompiled header file is from a previous
    malloc用法
    C语言中i++和++i的区别
    vs未定义的标识符“round”ceil()和floor()
    error C2065: “uint8_t”: 未声明的标识符
    strtol 函数用法
    C++ “string”: 未声明的标识符
    C++ 中c_str()函数
  • 原文地址:https://www.cnblogs.com/jiqianqian/p/6564073.html
Copyright © 2011-2022 走看看