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

时间:2011-09-06 20:30:43

标签: java

在他的“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();
    }
}

5 个答案:

答案 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)

采用addString的{​​{1}}方法调用不同的 Person方法,该方法需要add 。需要Position的那个继承自Position类。

由于您的课程ArrayList扩展了Staff,因此它会自动拥有ArrayList<Position>方法。新的add(Position)方法是专为Staff类编写的方法。

答案 3 :(得分:0)

这只是一个过载。 add方法来自ArrayList类。看看Staff 从中继承

答案 4 :(得分:-2)

递归是一种调用自身的方法。在这种情况下,它是一个递归。但是,在您在方法中设置限制以停止循环(if-condition)之前,它将会超载。