2017-10-20 19 views
-3

私は三つのクラス(クラスA、クラスB、クラスC)作成するオブジェクトをJavaのメソッドのパラメータとして渡すにはどうすればよいですか?

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"); 
} 
+0

このメソッドの実装がAとBで異なる場合は、共通のスーパークラスCでメソッドを定義しないでください。投稿したコードが実際ではないので、正確に何をしようとしているのかを理解するのは難しいです'new Class(arraySize)'のようなものを持つ有効なjava –

+0

このサンプルコードは**コンパイルしません**。 – AKSW

答えて

1

両方のクラスの行動が同じであることを行っている場合、あなたは、単にこのように、多型を経由してスーパータイプ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"); 
    } 
} 

クラスABは、静的メソッドを継承します。 objectは両方ABオブジェクトに

を取ることができます。同じクラスのオブジェクトを扱うときにあなたの方法は、ない非常にOOである(例えば、クラスCCオブジェクト)、あなたはむしろメソッドのアクセスオブジェクトのメンバーにする必要がありますそれは同じクラスなので直接!したがって

、にあなたの方法を変更することを検討:あなたはクラスAまたはBをインスタンス化したいならば、あなたはクラスCabstractとしてメソッドを定義し、ABの両方でそれをオーバーライドする必要が

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"); 
    } 
} 
+0

ありがとうございます。それは私のために働いているようだ。また、私のコードを2倍速くしました。 :) – user982467

+0

これはなぜ静的ですか?単に非静的にするのではなく、不要な 'object'パラメータを取り除き、' getArray() 'を呼び出すのはなぜですか? – Kayaman

+0

@ Kayamanそれは彼のデザイン決定です、私は彼が彼の質問ごとに必要なものを変更しました!しかし、十分に公正、私はOPにそれを提案しました! – BaSsGaz

0

、例えば:

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

Here's抽象クラスと継承についてもっと知る

関連する問題