Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中将要创建的对象作为方法的参数传递?_Java - Fatal编程技术网

如何在Java中将要创建的对象作为方法的参数传递?

如何在Java中将要创建的对象作为方法的参数传递?,java,Java,我有三个班(A班、B班、C班) A类扩展C类 B类扩展C类 我想在类C中创建一个两个类都可以使用的方法,而不必在两个类中编写相同的方法。我需要一种方法将方法中创建的对象作为参数传递,因为这两个类的对象不同。我的方法如下: public static void timer(int arraySize) { long startTime = System.nanoTime(); Class A myClass = new Class(arraySize); System.ou

我有三个班(A班、B班、C班)

A类扩展C类

B类扩展C类

我想在
类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
将继承静态方法<代码>对象可以同时接受
A
B
对象

注意:您的方法不是很面向对象,当处理同一类的对象时(例如
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
中将该方法定义为
抽象
,并在
A
B
中重写它,例如:

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);

更多关于抽象类和继承的信息。

如果此方法的实现对于A和B不同,则不应该在它们的公共超类C中定义该方法。但是,很难理解您到底想做什么,因为您发布的代码不是真正有效的java,比如
new Class(arraySize)
此示例代码未编译。谢谢。这似乎对我有用。也使我的代码速度提高了一倍。:)为什么是静态的?为什么不让它成为非静态的,去掉不必要的
对象
参数并调用
getArray()
?@Kayaman这是他的设计决定,我只根据他的问题更改了他需要的!但公平地说,我已经建议你这么做了!但是C是我的抽象类,并且该方法在不止一个类中使用。