在同一个类中调用另一个方法的方法

33
在Bruce Eckel的《Java编程思想》第四版第428页 (有关类型信息的章节) 中,他给出了以下示例:
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();
    }
}
5个回答

61

Java隐式地假定对于像这样调用的方法,存在对当前对象的引用。

// Test2.java
public class Test2 {
    public void testMethod() {
        testMethod2();
    }

    // ...
}

完全相同

// Test2.java
public class Test2 {
    public void testMethod() {
        this.testMethod2();
    }

    // ...
}

我更喜欢第二个版本,因为它更清楚地表达了你想做什么。


4

这不是递归,而是重载。你的代码片段中的两个add方法和你所继承的ArrayList提供的add方法不是同一个方法,因为它们声明了不同的参数。


顺便说一句,那本书很棒! - Simone Gianni
1
我认为这个回答比被采纳的回答更好地解决了问题。实际上,让人困惑的是重载,而不是方法调用语法。 - T_T
1
这绝对是方法重载的情况,但我认为这不是 OP 困惑的问题所在。更多的是关于在没有任何对象引用的情况下调用非静态方法。 - Abhishek Pathak

3
那个接收一个 String 和一个 Person 的 add 方法正在调用另一个接收一个 Position 的 add 方法。接收 Position 的方法是从 ArrayList 类继承来的。
由于你的 Staff 类扩展了 ArrayList,它自动拥有 add(Position) 方法。新的 add(String, Person) 方法是专门为 Staff 类编写的。

0

这只是一个重载。 add 方法来自于 ArrayList 类。注意 Staff 继承 自它。


-2

递归是一种调用自身的方法。在这种情况下,它是一种递归。但是,如果不在方法内部放置限制来停止循环(if条件),则会导致过载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接