2017-10-20 2 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)'와 같은 유효한 자바 –

+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 개체), 당신은 오히려 방법 액세스 개체의 멤버해야한다 그것이 같은 클래스이기 때문에 직접적으로!

따라서는, 귀하의 방법을 변경하는 것을 고려 :

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

감사합니다. 그것은 나를 위해 일하는 것 같습니다. 또한 내 코드를 두 배 빠르게 만들었습니다. :) – user982467

+0

왜 정적입니까? 왜 그냥 정적이 아닌, 불필요한'object' 매개 변수를 없애고'getArray()'를 호출할까요? – Kayaman

+0

@ 카야 만 그건 그의 디자인 결정이야, 나는 단지 그의 질문에 필요한 것을 바꿨다! 그러나 공정한만큼, 나는 OP에 그것을 제안했다! – BaSsGaz

0

당신이 다음 클래스 Cabstract 같은 방법을 정의하고 모두 AB, 예를 들어 그것을 오버라이드 (override) 할 필요가 클래스 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); 

Here's 추상 클래스 및 상속에 대한 자세한 내용입니다.

관련 문제