2010-10-03 92 views
6

假设我有一类两种方法说的Java超载和压倒一切的

public void eat(int i,String s)

public void eat(String s, int i)

那么它是什么样子。超载或覆盖?

+5

只需阅读每篇文章的第一句话http://en.wikipedia.org/wiki/Method_overloading http://en.wikipedia.org/wiki/Method_overriding – 2010-10-03 06:09:39

+0

如果您的方法放在孩子身上,它会超载和重载提供不同暗示的类。 – qrtt1 2010-10-03 06:15:09

回答

10

重载意味着两个方法或多个具有相同名称但具有不同参数的方法,就像您的示例。重写您从接口或抽象类实现方法,以便超类中的方法具有实现,并且在子类中有一个不同的,但他们有相同的方法名称和参数。

6

这将是方法重载,因为它满足了方法重载的条件:

  • 必须有不同的参数列表
  • 可能有不同的返回类型,如果 参数列表也不同
  • 五月有不同的访问修饰符
  • 可能会抛出不同的异常

只有在涉及继承时也可以重写。由于你的两个方法都在同一个类中,所以它不能重写。

6

这是超载。当您为不同的实现提供相同的方法签名时,覆盖用于继承。

2

这是超载。简而言之:
     重写=更换
     重载=给予更多的选择

2

类约超载和压倒一切的规则:

  1. 构造函数可以被重载,但不覆盖。
  2. 抽象方法必须被第一个具体子类覆盖。
  3. 覆盖方法:
    • 必须具有相同的参数列表,
    • 必须有相同的返回类型(也可以是父母的类的返回类型的子类,
    • 不能有更严格的访问改性剂,
    • 可以具有较少限制的访问修饰符,
    • 必须不引发新的或更广泛的检查异常,
    • 可能抛出更少或更窄的检查异常,或任何未检查异常。
  4. final方法不能被覆盖。
  5. 只有被继承的方法可能被覆盖,并且记住私有方法不被继承。
  6. 在子类中使用:super.overriddenMethodName()来调用超类的重写方法。
  7. 重载方法:
    • 必须有不同的参数列表,
    • 可能有不同的返回类型,如果参数列表也不同,
    • 可能有不同的访问修饰符,
    • 可能抛出不同的异常。
  8. 来自超类的方法可以在子类中重载。
  9. 多态性适用于重写,但不适用于重载。
  10. 对象类型(不是引用变量的类型)确定在运行时使用哪个重写的方法。
  11. 引用类型确定编译时将使用哪种重载方法。

*取自Sun Certified Programmer for Java 6学习指南作者:Kathy Seirra,Bert Bates。

0

房源------------------- OverLoading --------------------覆盖区

方法名称-------------->必须相同-------------------->必须相同

Arg类型------------------>必须不同(atleast arg)---->必须相同(包括订单)

方法签名------ ----->必须不同(atleast arg)---->必须相同(包括订单)

返回类型---------------->没有限制------------------->ñ Ø限制

私人,静态,最终------->无限制-------------------->必须与

访问修改器------------>无限制--------------------相同

try/Catch ------ ----------->无限制--------------------抛出异常

方法解析------- - >编译器时间(参考)--------(JVM)运行时间Poymorphism

1

方法重载只是意味着在一个具有相同名称但参数不同的类中提供了两个单独的方法,而方法的返回类型可能相同也可能不同,这允许我们重用相同的方法名称。

方法覆盖装置限定在其中与同一即名称,参数相同的方法签名父类已经定义,并返回型子类的方法。

差分方法重载和方法覆盖之间

Difference Between Method Overloading and Method Overriding

欲了解更多详情,您可以阅读Everything About Method Overloading Vs Method Overriding