如何在Java中将要创建的对象作为方法的参数传递?
我有三个班(A班、B班、C班)如何在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类扩展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是我的抽象类,并且该方法在不止一个类中使用。