【发布时间】:2022-01-10 08:51:36
【问题描述】:
假设我在一个类中有两个方法说
public void eat(int i,String s) 和
public void eat(String s, int i)
那么它是什么样的。重载还是覆盖?
【问题讨论】:
-
如果你的方法放在一个提供不同实现的子类中,它就是重载和覆盖。
假设我在一个类中有两个方法说
public void eat(int i,String s) 和
public void eat(String s, int i)
那么它是什么样的。重载还是覆盖?
【问题讨论】:
重载意味着两个或多个具有相同名称但具有不同参数的方法,就像您的示例一样。重载时,您从接口或抽象类实现方法,因此超类中的方法具有实现,而子类中的方法具有不同的一个,它们仍然具有相同的方法名称和参数。
【讨论】:
那就是方法重载,因为它满足方法重载的条件:
只有在涉及继承时才会发生覆盖。由于您的两个方法都在同一个类中,因此不能被覆盖。
【讨论】:
这是超载。当您为相同的方法签名提供不同的实现时,将在继承中使用覆盖。
【讨论】:
那是超载。简而言之:
覆盖 = 替换
重载 = 提供更多选择
【讨论】:
方法重载仅仅意味着在一个类中提供两个不同的方法,名称相同但参数不同,而方法返回类型可能不同也可能不同,这允许我们重用相同的方法名称。 p>
方法覆盖是指在子类中定义一个方法,该方法已经在父类中定义,具有相同的方法签名,即相同的名称、参数和返回类型。
方法重载和方法覆盖的区别
更多详情可以阅读Everything About Method Overloading Vs Method Overriding。
【讨论】:
一种关于重载和覆盖的规则:
*摘自 Kathy Seirra、Bert Bates 的 Sun Certified Programmer for Java 6 Study Guide。
【讨论】:
重载:在Java中,重载是一个过程,其中一个类通过区分没有参数或参数类型来包含方法或构造函数的多个实现。
public class TestDemo
{
public void disp(String c)
{
System.out.println(c);
}
public void disp(String c, int n)
{
System.out.println(c+" "+n);
} }
class Sample
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
TestDemo obj=new TestDemo();
obj.disp("a");
obj.disp("a",2);
}}
Overriding :这里的方法可以覆盖。它必须发生在两个班级内。一个是父母,另一个是孩子。在这个父类的同名同签名方法中。
public class TestDemo
{
public void eat()
{
System.out.println("Human is Eating");
}
}
class Overriding extends TestDemo
{
public void eat()
{
System.out.println("Human is Eating");
}
public static void main(String[] args)
{
Overriding obj=new Overriding();
obj.eat();
}
}
更多知识请点击此链接:https://arzatechs.com/overloading-and-overriding-in-java/
【讨论】:
过载:
在同一个类中有两个或多个同名但参数不同的方法。和你的问题情况一样。
public void eat(int i,String s)
public void eat(String s, int i)
因此,在您的情况下,它是方法重载。
覆盖:
例如
class Animal{
void eat(){System.out.println("eating...");}
}
class Dog extends Animal{
void eat(){System.out.println("eating bread...");}
}
【讨论】:
在这种特定情况下,它是重载。
让我们稍微区分一下这两个术语:
重载(函数名相同但签名不同):
覆盖(具有相同签名的相同函数):
访问以了解有关overloading and overriding 的更多信息。
【讨论】:
属性 ------------------- 重载 -------------------- 覆盖
方法名称 -------------->必须相同--------> 必须相同
参数类型------------------>必须不同(至少 arg)---->必须相同(包括顺序)
方法签名----------->必须不同(至少arg)---->必须相同(包括顺序)
返回类型---------------->无限制----------------->无限制
Private,Static,Final------->无限制-------------------->必须相同
访问修改器------------>无限制--------相同
try/Catch----------------->无限制--------抛出异常
方法解析-------->编译器时间(参考)--------(JVM)运行时多态
【讨论】: