专栏首页MySQL入坑记Java中方法重载和覆盖之间的区别

Java中方法重载和覆盖之间的区别

Java中的重载与重载

  1. 重载在编译时发生,而重载在运行时发生:重载方法调用与其定义的绑定已在编译时发生,但是重载方法调用对其定义的绑定在运行时发生。
  2. 静态方法可以重载,这意味着一个类可以具有多个同名的静态方法。静态方法不能被覆盖,即使您在子类中声明了相同的静态方法,也与父类的相同方法无关。
  3. 最基本的区别是重载是在同一个类中完成的,而要覆盖基类和子类则是必需的。重写就是为父类的继承方法提供特定的实现。
  4. 静态绑定用于重载方法,动态绑定用于重载/覆盖方法。
  5. 性能:与覆盖相比,重载可提供更好的性能。原因是重写的方法的绑定是在运行时完成的。
  6. 私有方法和最终方法可以重载,但不能被覆盖。这意味着一个类可以具有多个同名的私有/最终方法,但是子类不能覆盖其基类的私有/最终方法。
  7. 在方法重载的情况下,方法的返回类型无关紧要,可以相同也可以不同。但是,如果方法被重写,则重写方法可以具有更特定的返回类型(请参阅this)。
  8. 执行方法重载时,参数列表应该不同。参数列表应与方法覆盖中的相同。

重载示例

//A class for adding upto 5 numbers
class Sum
{
    int add(int n1, int n2) 
    {
        return n1+n2;
    }
    int add(int n1, int n2, int n3) 
    {
        return n1+n2+n3;
    }
    int add(int n1, int n2, int n3, int n4) 
    {
        return n1+n2+n3+n4;
    }
    int add(int n1, int n2, int n3, int n4, int n5) 
    {
        return n1+n2+n3+n4+n5;
    }
    public static void main(String args[])
    {
    	Sum obj = new Sum();
    	System.out.println("Sum of two numbers: "+obj.add(20, 21));
    	System.out.println("Sum of three numbers: "+obj.add(20, 21, 22));
    	System.out.println("Sum of four numbers: "+obj.add(20, 21, 22, 23));
    	System.out.println("Sum of five numbers: "+obj.add(20, 21, 22, 23, 24));
    }
}

输出:

Sum of two numbers: 41
Sum of three numbers: 63
Sum of four numbers: 86
Sum of five numbers: 110

在这里,我们有4个相同方法的版本add。我们在add()这里重载该方法。

覆盖示例

package beginnersbook.com;
class CarClass
{
    public int speedLimit() 
    {
        return 100;
    }
}
class Ford extends CarClass
{
    public int speedLimit()
    {
        return 150;
    }
    public static void main(String args[])
    {
    	CarClass obj = new Ford();
    	int num= obj.speedLimit();
    	System.out.println("Speed Limit is: "+num);
    }
}

输出:

Speed Limit is: 150

这里speedLimit()的class方法Ford是覆盖speedLimit()class方法的CarClass

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 详解:Java的重载方法与示例

    方法重载是一项功能,如果一个类的参数列表不同,则它允许一个类拥有多个具有相同名称的方法。它类似于Java中的构造函数重载,它允许一个类具有多个具有不同参数列表的...

    陈哈哈
  • mybatis的Mapper文件中的大于小于号,为什么要转成“< ;”、“> ;”,转义后的lt、gt又代表什么?

    mybatis中的mapper文件是xml文件,不允许出现类似“>”这样的字符,会与文件本身的标签"<xxx>"冲突,

    陈哈哈
  • (一招搞定)tomcat与服务器时间相差8小时,修改catalina.sh后还不行怎么办?

    在网上查询尝试了一些办法如:修改tomcat文件下的bin/catalina 文件中set JAVA_OPTS= -Duser.timezone=GMT+08

    陈哈哈
  • Android自定义RecyclerView实现不固定刻度的刻度尺

    本文实例为大家分享了自定义RecyclerView实现不固定刻度的刻度尺的具体代码,供大家参考,具体内容如下

    砸漏
  • 每日一题C++版(袋鼠过河)

    编程是很多偏计算机、人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用。因此小白决定开辟一个新的板块“每日一题”,通过每天一道编程题目来强化...

    小白学视觉
  • LeetCode 1020. 飞地的数量(图的BFS/DFS)

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/number-of-enclaves 著作权归领扣网...

    Michael阿明
  • 斐波那契数列的若干解法

    无道
  • LeetCode 1101. 彼此熟识的最早时间(排序+并查集)

    在一个社交圈子当中,有 N 个人。每个人都有一个从 0 到 N-1 唯一的 id 编号。

    Michael阿明
  • 写一个程序检查一个整数是2的幂?

    用户4645519
  • Android绘制圆形百分比加载圈效果

    自定义这样的圆形加载圈还是比较简单的,主要是用到Canvans的绘制文本,绘制圆和绘制圆弧的api:

    砸漏

扫码关注云+社区

领取腾讯云代金券