簡體   English   中英

如何將要創建的對象作為 Java 方法的參數傳遞?

[英]How to pass a object to be created as a parameter for a method in Java?

我有三個班級(A班,B班,C班)

Class A extends Class C

Class B extends Class C

我想在Class C類中創建一個兩個類都可以使用的方法,而不是我必須在兩個類中都編寫相同的方法。 我需要一種方法將在方法中創建的對象作為參數傳遞,因為這兩個類都不同。 我的方法如下:

public static void timer(int arraySize) {
    long startTime = System.nanoTime();
    Class A myClass = new Class(arraySize);
    System.out.println(Arrays.toString(myClass.getArray()));
    long endTime = System.nanoTime();
    System.out.print("Total time: " + (endTime - startTime)/1000 + " microseconds");
 }

如果兩個類的行為將相同,您可以通過多態簡單地通過超類類型C引用該對象,如下所示:

class C {
    public static void timer(int arraySize, C object) {
        long startTime = System.nanoTime();
        C myObject = object;
        System.out.println(Arrays.toString(myObject.getArray()));
        long endTime = System.nanoTime();
        System.out.print("Total time: " + (endTime - startTime) / 1000 + " microseconds");
    }
}

A類和B類將繼承靜態方法。 object可以同時使用AB對象

注意:您的方法不是很OO,用相同的類的對象打交道時(如C類中的對象C ),你倒是應該使該方法訪問對象的成員,直接因為它是同一類!

因此,請考慮將您的方法更改為:

class C {
    public void timer(int arraySize) {
        long startTime = System.nanoTime();
        System.out.println(Arrays.toString(this.getArray()));
        long endTime = System.nanoTime();
        System.out.print("Total time: " + (endTime - startTime) / 1000 + " microseconds");
    }
}

如果要實例化A類或B類,則需要在類C將該方法定義為abstract方法,並在AB覆蓋它,例如:

public abstract class C {
    public abstract void timer(int arraySize);
}

public class A extends C {
    public void timer(int arraySize){
        //Some code
        A object = new A(arraySize);
        //Some code
    }
}

public class B extends C {
    public void timer(int arraySize){
        //Some code
        B object = new B(arraySize);
        //Some code
    }
}

然后您可以使用 C 的引用調用它,例如:

C c = new A();
c.timer(100);
c = new B();
c.timer(100);

這里有更多關於抽象類和繼承的內容。

暫無
暫無

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

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