2014-12-23 2 views
2

다음 클래스가 주어지면 if/else 문을 기반으로 하위 클래스를 만드는 것을 결정합니다. 올바른 방법입니까? 또한, 부모를 반환하고 자식을 반환하는 메서드를 선언하는 것이 맞습니까? (someMethod 참조). 그것은 옳지 않은 것처럼 보입니다. 더 좋은 방법이 있습니까?메소드에서 Java 자식 반환

public class Parent { 

    int someInt; 
} 

public class Child1 extends Parent { 

    int id1; 
    String field1; 
} 

public class Child2 extends Parent { 

    int id2; 
    String field2; 
} 

클래스는 다음과 같은 방법으로 사용됩니다

public class SomeClass { 

    public Parent someMethod(int option) { 

     Parent object = null; 
     if (option == 1) { 
      object = new Child1(); 
      // set Child1 fields 
      return object; 
     } 
     else { 
      object = new Child2(); 
      // set Child2 fields 
      return object; 
     } 

    } 


} 

답변

1

가 부모를 반환하고 아이를 반환하는 방법을 선언하는 올바른?

예, Parent은이 방법에 대한 올바른 반환 유형입니다. 그리고 코드는 괜찮아 보입니다.

몇 가지 사소한 발언 :

  • 당신은 정말 "상위/하위"관계가없는 return option == 1 ? new Child1() : new Child2();
  • 클래스로 구현할 수 있습니다. 입니다. (자식 은 부모가입니다.) 기본 클래스 (또는 수퍼 클래스) 대 하위 클래스는 더 나은 용어입니다.
+1

두 번째 "부적절한"발언은 전혀 사소한 것이 아닙니다! 그것은 객체 상속의 근본 개념입니다. 따라서 객체 지향 프로그래밍과 관련하여이를 이해하는 것이 중요합니다. – greydet

0

코드는 그대로 좋아 보이는, 당신은 아마 그 상황에서 더 잘 맞는 경우 Parentabstract class 또는 interface을 생각할 수있다. 하지만 당신은 개선 중 aioobe으로 삼항 연산자를 사용하여 제안 또는 스위치의 경우 문을 사용할 수 somemethod에 뭔가가, IMO 그들은 더 많은 읽을 수 있습니다 :

public Parent somemethod (int option) 
{ 
    switch(option) 
    { 
    case 1: return Child1(); 
    default: return Child2(); 
    } 
} 
1

예이 완전히 정확합니다.

그것은 정확히 같은 공장 디자인 패턴이 어떻게 생겼는지 : http://en.wikipedia.org/wiki/Factory_method_pattern

+0

@aioobe 당신이 이름에 대해 잘 알고 있듯이, 정적 인 것 또는 부모 클래스의 일부에 대해서는 동의하지 않습니다. – user902383

+0

@aioobe 이것은 구현의 선택입니다. 여러분은 많은 구현이 factory 메소드를 정적으로 만들지 만 IMO는 필수는 아닙니다. 또한 Parent 클래스는 일반적으로 팩토리 클래스가 아닙니다. 우리는 서로 다른 부모 클래스와 공통 외부 팩토리를 가진 복잡한 이기종 클래스 계층 구조의 팩토리를 상상할 수 있습니다. – greydet

0

과 같이 슈퍼 클래스 참조 변수에 하위 클래스 객체를 저장할 수 있습니다 고려 될 수있다. 이것은 업 캐스팅 (upcasting)으로 불리며 자바에서 완벽하게 괜찮습니다. 그리고 당신의 코드는 완벽 해 보입니다.

관련 문제