繁体   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