重载方法的基本概念是什么
What is the basic concept of overloading a method
在重载中,当我们重载一个方法时,为什么我们不能创建一个与重载方法一样工作的新方法,因为我们必须写相同数量的代码行 例如在我的示例中...为什么我不能制作一个新的方法b() 将两个数字相乘。
public class que {
public void a(int a)
{
System.out.println(a);
}
public void a(int b,int c) {
System.out.println(b*c);
}
public static void main(String[] args) {
que queObject = new que();
queObject.a(5);
queObject.a(3,4);
}
}
你可以让你所有的方法有不同的名字。关键是你不必这样做。这减少了使用 API 的开发人员需要学习的名称数量。
例如在 PrintWriter 中,您有很多称为 print
和 println
的方法,它们在概念上都做同样的事情。它们可以被赋予不同的名称,但是你需要知道你想调用哪个方法,
在运行时,每个方法签名都是唯一的,因为它包括 return 类型和非泛型参数类型形式。即在字节码中,名称对您来说是唯一的。
在 Java 中,方法不能 distinguished/overloaded 是 return 类型,尽管在 Java 6 中有一个错误允许重载具有不同 return 类型。
没有人说你做不到。它只是不是 方法重载 。这被定义为具有相同名称但具有不同(参数)签名的两个或多个方法。
方法名表示方法的作用。因此,如果您有 2 个具有相同名称但需要不同参数的方法。同名有利于代码的理解和更好的设计
所以如果你添加另一个方法
public void a(int b,int c,int d) {
System.out.println(b*c*d);
}
你基本上做了相同的行为,即乘法,但参数更多。所以重写对于理解和良好的编码原则更好。
考虑一下
public void eat(Orange o) {
// eat Orange
}
public void eat(Mango m) {
// eat Mango
}
您希望根据作为参数传递的内容进行不同的实现,但希望保持方法名称相同。
更多信息-->
Polymorphism vs Overriding vs Overloading
这是我的解释:
public class Calculator {
// used for integer numbers
public int sum(int a, int b) {
return a + b;
}
// used for double numbers
public double sum(double a, double b) {
return a + b;
}
}
在这种情况下,您不关心是否将 sum 方法与 int 或 double 一起使用 - sum 方法被重载,因此它将同时使用 int 和 double。这比分别使用 sumInts() 和 sumDoubles() 容易得多。
方法重载是指在 class 中有多个同名但参数不同的方法,尽管它可以有不同的 return 类型(不同的 return 类型是本身并不是一个显着特征,如果仅更改它会导致编译错误)。
有关完整的讨论,请参阅:http://beginnersbook.com/2013/03/polymorphism-in-java/
我们为什么需要它?
一个例子很有启发性:让我们以无处不在的 StringBuilder
class 及其 append
方法为例。它们是超载的典型例子。方法重载的一个具体实例也是 constructor
重载。再看StringBuilder
:http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html.
另一个适合你的例子:我们也可以在 StringBuilder
class 中有一个 appendBoolean(boolean b)
和一个 appendString(String b)
和一个 appendChar(char c)
.拥有那个或只拥有一组重载的 append
方法是一个清晰度和选择的问题。对我来说——因为操作是追加,但我们追加的是不同的实例类型——重载 append
是有意义的,并且提供清晰和简洁。另一方面,对于重载的构造函数,您没有这样的选择:它们需要与 class 具有相同的名称 - 这是约定和设计:-)
在重载中,当我们重载一个方法时,为什么我们不能创建一个与重载方法一样工作的新方法,因为我们必须写相同数量的代码行 例如在我的示例中...为什么我不能制作一个新的方法b() 将两个数字相乘。
public class que {
public void a(int a)
{
System.out.println(a);
}
public void a(int b,int c) {
System.out.println(b*c);
}
public static void main(String[] args) {
que queObject = new que();
queObject.a(5);
queObject.a(3,4);
}
}
你可以让你所有的方法有不同的名字。关键是你不必这样做。这减少了使用 API 的开发人员需要学习的名称数量。
例如在 PrintWriter 中,您有很多称为 print
和 println
的方法,它们在概念上都做同样的事情。它们可以被赋予不同的名称,但是你需要知道你想调用哪个方法,
在运行时,每个方法签名都是唯一的,因为它包括 return 类型和非泛型参数类型形式。即在字节码中,名称对您来说是唯一的。
在 Java 中,方法不能 distinguished/overloaded 是 return 类型,尽管在 Java 6 中有一个错误允许重载具有不同 return 类型。
没有人说你做不到。它只是不是 方法重载 。这被定义为具有相同名称但具有不同(参数)签名的两个或多个方法。
方法名表示方法的作用。因此,如果您有 2 个具有相同名称但需要不同参数的方法。同名有利于代码的理解和更好的设计
所以如果你添加另一个方法
public void a(int b,int c,int d) {
System.out.println(b*c*d);
}
你基本上做了相同的行为,即乘法,但参数更多。所以重写对于理解和良好的编码原则更好。
考虑一下
public void eat(Orange o) {
// eat Orange
}
public void eat(Mango m) {
// eat Mango
}
您希望根据作为参数传递的内容进行不同的实现,但希望保持方法名称相同。
更多信息-->
Polymorphism vs Overriding vs Overloading
这是我的解释:
public class Calculator {
// used for integer numbers
public int sum(int a, int b) {
return a + b;
}
// used for double numbers
public double sum(double a, double b) {
return a + b;
}
}
在这种情况下,您不关心是否将 sum 方法与 int 或 double 一起使用 - sum 方法被重载,因此它将同时使用 int 和 double。这比分别使用 sumInts() 和 sumDoubles() 容易得多。
方法重载是指在 class 中有多个同名但参数不同的方法,尽管它可以有不同的 return 类型(不同的 return 类型是本身并不是一个显着特征,如果仅更改它会导致编译错误)。
有关完整的讨论,请参阅:http://beginnersbook.com/2013/03/polymorphism-in-java/
我们为什么需要它?
一个例子很有启发性:让我们以无处不在的 StringBuilder
class 及其 append
方法为例。它们是超载的典型例子。方法重载的一个具体实例也是 constructor
重载。再看StringBuilder
:http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html.
另一个适合你的例子:我们也可以在 StringBuilder
class 中有一个 appendBoolean(boolean b)
和一个 appendString(String b)
和一个 appendChar(char c)
.拥有那个或只拥有一组重载的 append
方法是一个清晰度和选择的问题。对我来说——因为操作是追加,但我们追加的是不同的实例类型——重载 append
是有意义的,并且提供清晰和简洁。另一方面,对于重载的构造函数,您没有这样的选择:它们需要与 class 具有相同的名称 - 这是约定和设计:-)