2016-11-21 3 views
-1

나는 추상 클래스 인 Rental을 가지고있다 ... 나는 두개의 서브 클래스 인 SuiteRental과 SimpleRoomRental을 Rental 클래스를 상속 받았다. 나는 개체 SimpleRoomRental과 SuiteRental을 모두 포함하는 3 등급 호텔 (다른 사람들과 연결되지 않은)에 ArraList를 가지고 있습니다.ArrayList의 객체를 검사하는 방법 (java)

그래서 (instance_of로 propably) 각 개체를 검사하고 싶습니다 (나는 그 추상 클래스를 일으키는) 렌탈 개체를 만들 수 없습니다. 어떤 유형의 'k'개체를 선언해야합니까?!?

어떤 아이디어가 있습니까?

public void calculateTotalRentalFees(){ 

     double price=0; 

     for (int i=0; i<rentals.size(); i++){ 

      if (k instanceof SimpleRoomRental){ 
      SimpleRoomRental y= new SimpleRoomRental(); 
      price=price + y.calculateCost(); 

      }else if(k instanceof SuiteRental){ 
       SuiteRental z=new SuiteRental(); 
       price=price + z.calculateCost(); 

      } 

     } 
    } 

또한 calculateCost() 메소드가 포함 된 인터페이스가 있습니다.

public interface Cost { 

public interface Costs { 
    double calculateCost();    
}  

가} 당신은 또한 그들을 모두 처리 할 수있는 인터페이스를 사용하여 시간

+0

'대여'인스턴스를 만드는 데 '새'를 사용할 수 없다고해서 대여 유형의 변수를 사용할 수 없다는 것을 의미하지는 않습니다. instanceof 검사는 쓸모 없다. Rental에서 calculateCost() 추상 메소드를 추가하기 만하면됩니다. 당신은 상속과 다형성의 요점을 완전히 놓치고 있습니다. –

+0

'ArrayList'가 선언 된 클래스로 선언하십시오. – RamenChef

+0

'렌털'의 종류는 무엇입니까? 새로운 인스턴스를 만드는 것보다'SimpleRoomRental'이나'SuiteRental'에'k'를 넣고 싶다면 ... 그리고'for' 루프를 개선하는 것이 더 나을 것이라고 생각합니다. 하지만 그들을 캐스팅해야합니까? 'Rental'은'calculateCost()'메소드를 가지고 있지 않습니까? 'rentals'가'ArrayList '이라면 꼭 필요한 것 같습니다. –

답변

0

주셔서 감사합니다, 즉 다형성을 사용하는 이점은이다, 그들은 심지어 그 방법에 대해 서로 다른 구현을 할 수 있습니다!

RoomRental rental = new SimpleRoomRental(); 
// You can use too: new SuiteRental(); 
price = price + rental.calculateCost(); 
+0

하지만 ArrayList의 현재 객체가 SimpleRoomRental 또는 SuiteRental인지 어떻게 확인해야합니까? :/ – Manolis

+0

귀하의 예제에서 당신은'new'을 사용하고 있으므로 arrayList.get (i)를 사용해야합니다. –