您的位置 首页 java

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

在本文中,我们将讨论 Java 重载和覆盖之间的区别。如果您不熟悉这些术语,请参考以下文章:

  • Java中的方法重载
  • 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。

    目前在职Java开发,如果你现在也在学习Java,在入门学习Java的过程当中缺乏基础入门的视频教程, 可以关注并私信我:01。免费领取2020年最新Java基础精讲视频教程,学习手册,面试题,开发工具,PDF文档书籍教程,以下资料截图:

    关注并私信我:01。即可领取以上学习资料。

    文章来源:智云一二三科技

    文章标题:Java中方法重载和覆盖之间的区别

    文章地址:https://www.zhihuclub.com/174205.shtml

    关于作者: 智云科技

    热门文章

    网站地图