在他的“Thinking In Java,4th Ed。”第428页(关于类型信息的章节)中,Bruce Eckel有以下例子:
public class Staff extends ArrayList<Position> {
public void add(String title, Person person) {
add(new Position(title, person));
}
/* rest of code snipped */
也许我有点累,但我看不出add()方法中add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(我在ArrayList或List中找不到静态add())。我错过了什么?
我刚刚为自己测试过,发现这很有效:
// Test2.java
public class Test2 {
public void testMethod() {
testMethod2();
}
public void testMethod2() {
System.out.println("Here");
}
public static void main(String[] args) {
Test2 t = new Test2();
t.testMethod();
}
}
答案 0 :(得分:41)
Java隐式假设对这样调用的方法的当前对象的引用。所以
// Test2.java
public class Test2 {
public void testMethod() {
testMethod2();
}
// ...
}
与
完全相同// Test2.java
public class Test2 {
public void testMethod() {
this.testMethod2();
}
// ...
}
我更喜欢第二个版本,以便更清楚地了解您想要做什么。
答案 1 :(得分:3)
Ciao Adriano。
它不是递归,而是超载。两个添加方法(您的代码段中的方法,以及您正在扩展的ArrayList提供的方法)不是相同的方法,因为它们是使用不同的参数声明的。
答案 2 :(得分:1)
采用add
和String
的{{1}}方法调用不同的 Person
方法,该方法需要add
。需要Position
的那个继承自Position
类。
由于您的课程ArrayList
扩展了Staff
,因此它会自动拥有ArrayList<Position>
方法。新的add(Position)
方法是专为Staff类编写的方法。
答案 3 :(得分:0)
这只是一个过载。 add
方法来自ArrayList
类。看看Staff
从中继承。
答案 4 :(得分:-2)
递归是一种调用自身的方法。在这种情况下,它是一个递归。但是,在您在方法中设置限制以停止循环(if-condition)之前,它将会超载。