2011-12-28 3 views
3

수퍼 클래스 유형 시나리오에서 제대로 설정하기 위해 속성을 가져 오는 데 약간의 문제가 있습니다.하위 클래스의 수퍼 클래스 속성 설정

내가 클래스 B가 클래스 A의 전문 버전되도록이 개 수업을 지금 내가 할 노력하고있어하는 속성을 설정하는 데 사용되는 방법을 사용하는 것입니다 ...의 말

public class A { 
    private String name; 
    private int id; 
    ... 
} 

public class B extends A { 
    private Date time; 
    private int status; 
    ... 
} 

하자 결과 세트에서에, 대신에 그들을 설정 B.

public A setProperties(ResultSet rs) { 
    A a = new A(); 
    a.setName(rs.getString(...)); 
    ... 
    return a; 
} 

의 인스턴스에 나는이의 반환을 복용하고 B로 캐스팅하려했지만, 물론 모든 A의는 B의입니다 ... 그래서 그것은 작동하지 않습니다. 나는 또한 setProperties 메서드에 다른 매개 변수를 추가하여 A를 가져 와서 A를 반환하므로 B를 다시 얻으려면 다형성을 사용할 수 있지만 그 후에는 모든 값이 0이됩니다.

나는 여기를 잃어 버렸고, 모든 추천은 크게 감사하겠습니다.

답변

6

수퍼 클래스에서 메서드를 선언하십시오. 서브 클래스는이 메소드를 오버라이드 (override) 해, super.foo(ResultSet rs)를 호출한다. 여기서는 foo(...)가 오버라이드 (override) 된 메소드이다. 여기에서 ResultSet을 구문 분석하고 개체 필드를 설정할 수 있습니다.

예 -

class Foo{ 
    void setProperties(final ResultSet rs){ 
     // do stuff 
    } 
} 

final class Bar extends Foo{ 
    @Override 
    final void setProperties(final ResultSet rs){ 
     // do stuff 
     super.setProperties(rs); 
    } 
} 

자세한 내용은 Using the Keyword super를 참조하십시오.

+0

나는 이것을 시도해야 할 것이다. 하위 클래스의 메서드를 재정의하지 않으면 슈퍼 클래스 속성을 설정하는 작업을 계속해야합니다. 맞습니까? – Shaded

+0

오른쪽. 서브 클래스에서'setProperties'를 명시 적으로 오버라이드하지 않고 서브 클래스 인스턴스에서 여전히 호출하면, 프로퍼티가 수퍼 클래스에 설정됩니다. – mre

+0

나는 여전히 문제가있다. 나는'A.setProperties()'에서 이름을 검사하고 있는데, 문제가 없다. 메서드가 반환 된 후에 나는'B.setProperties()'에서 다시 체크하고 null이다. 이견있는 사람? – Shaded

관련 문제