簡體   English   中英

在同一個類中的另一個方法內調用一個方法

[英]Calling a method inside another method in same class

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

Java隱式地假定對這樣調用的方法的當前對象的引用。 所以

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

    // ...
}

完全一樣

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

    // ...
}

我更喜歡第二個版本,以便更清楚地了解您想要做什么。

它不是遞歸,而是超載。 兩個添加方法(您的代碼段中的一個方法,以及您正在擴展的ArrayList提供的方法)不是相同的方法,因為它們是使用不同的參數聲明的。

add方法,需要一個String和一個Person被調用不同的 add方法,它接受Position 采用Position那個繼承自ArrayList類。

由於您的類Staff擴展了ArrayList<Position> ,因此它自動具有add(Position)方法。 新的add(String, Person)方法是專為Staff類編寫的方法。

這只是一個過載。 add方法來自ArrayList類。 看看Staff 繼承了它。

遞歸是一種自我調用的方法。 在這種情況下,它是一個遞歸。 但是,在您在方法中設置限制以停止循環(if-condition)之前,它將會超載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM