2012-04-22 3 views
0

안녕하세요 저는 수업을 가지고 있습니다 속성 및 2 개의 하위 클래스 아파트입니다.Java의 특정 서브 클래스 메소드에 액세스하는 방법은 무엇입니까?

다른 클래스에는 상점과 아파트가 혼합 된 속성의 건축가가 있습니다. 코드가 있습니다 :

for(Property prop: properties){ 
    if(prop.getClass().equals(Shop.class)) 
     prop.setShopDetails(detail); 
    else 
     prop.setAppDetails(detail) 
} 

shop 클래스의 setShopDetails() 메소드에는 어떻게 액세스합니까?

답변

6

당신은 Shopprop 캐스팅해야합니다

for(Property prop: properties){ 
    if(prop.getClass().equals(Shop.class)) 
     ((Shop) prop).setShopDetails(detail); 
    else 
     ((Apartment) prop).setAppDetails(detail) 
    } 
} 

더 좋은 방법은, 그러나, Property 클래스의 추상 메소드 setDetails를 정의하고 각 하위 클래스에서 다르게 구현하는 것입니다. prop.getClass().equals(Shop.class) 대신 prop instanceof Shop을 사용할 수도 있습니다.

+0

도움 주셔서 감사합니다. – Qor

0

먼저이 상황에서 getClass()을 호출해야한다는 사실은 잘못된 설계를 나타냅니다. 서브 클래스에 의해 오버라이드되는 단일 abstractsetDetails 메소드를 원할 수도 있습니다.

찾고있는 언어 기능은 "캐스팅"입니다. 서브 클래스의 메소드를 호출하기 전에, 당신은 다음처럼 Property 캐스팅 할 : 모든

((Shop)prop).getShopDetails(detail);

2

먼저, propShop의 서브 클래스 인 경우를 고려한다. if 조건이 false을 반환합니다! 이것은 instanceof operator을 사용하기에 완벽한시기입니다. 이러한 방법에 액세스하려면

, 당신은 올바른 서브 클래스로 객체를 캐스팅해야합니다 패배의

if(prop instanceof Shop) { 
    Shop s = (Shop) prop; 
    s.setShopDetails(details); 
} else { 
    // you get the idea 
} 

그러나, 이런 종류의 다형성의 목적. PropertysetDetails 메소드를 생성하고 서브 클래스가 어떻게 처리 할 수있게 허용합니까?

관련 문제