方法重载和覆盖有什么区别?

44 java overriding overloading

重载方法和覆盖方法有什么区别?任何人都可以用一个例子解释它吗?

His*_*eer 131

方法重载处理的概念是在同一个类中具有两个或多个具有相同名称但不同参数的方法.

void foo(int a)
void foo(int a, float b)
Run Code Online (Sandbox Code Playgroud)

方法覆盖意味着具有两个具有相同参数但具有不同实现的方法.其中一个将存在于父类中,而另一个将存在于派生类或子类中.的@Override注释,而不是必需的,可以是有帮助的执行的方法的适当的首要在编译时.

class Parent {
    void foo(double d) {
        // do something
    }
}

class Child extends Parent {

    @Override
    void foo(double d){
        // this method is overridden.  
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `@Override`不是必需的.这是一个很好的做法,但不是必需的. (28认同)
  • 对不起@GriffeyDog.你是对的"@Override"不是强制性的.但是要记住你压倒一种方法,这是一个很好的做法.谢谢提醒.. (7认同)
  • 重载不必在同一个类中,但也可以在父类和派生类之间完成. (5认同)

Jai*_*dra 35

方法覆盖是指子类重新定义与父类相同的方法,具有相同的参数.例如,标准Java类java.util.LinkedHashSet扩展java.util.HashSet.该方法add()被覆盖LinkedHashSet.如果你有一个类型的变量HashSet,并且你调用它的add()方法,它将调用适当的实现add(),基于它是a HashSet还是a LinkedHashSet.这称为多态性.

方法重载是在同一个类中定义几个接受不同数量和类型的参数的方法.在这种情况下,调用的实际方法是在编译时根据参数的数量和类型决定的.例如,该方法System.out.println()被重载,因此您可以传递整数和字符串,它将调用该方法的不同版本.

  • 如果你有一个使用不同参数定义相同方法的子类,那么它是否被认为是重写和重载? (4认同)
  • 然后它只是重载,因为它没有覆盖任何父方法. (4认同)