2011-03-09 2 views
1

에 내가 여기있다, 자바에 새로운 오전 :클래스는 자바

나는 클래스 비행기가 있습니다. 하지만 나는 다른 비행기 (PassengerPlane 또는 CargoPlane과 같은)를 가져야합니다. 그러면 비행기와 같은 다른 클래스 (예 : 공항)에서이 비행기를 사용해야합니다.

나는 동일한 클래스의 비행기에서 다른 속성 (cargoPlane은 최대 수용 인원, passengerPlane은 최대 승객 수)을 어떻게 가질 수 있습니까?

미리 감사드립니다.

+0

- 고려하지 않고 인식 맹목적으로 확장 클래스를하지만, 수 (일부 답변과 마찬가지로) 모범 사례가 아닙니다. 링크가 작동되기를 바랍니다. 그러나 http://books.google.co.uk/books?id=ka2VUBqHiWkC&pg=PA81&lpg=PA81&dq=favour+composition+over+inheritance&source=bl&ots=yXLoPfp1OY&sig=J6WkbHV-iDAp9HzhewbSD_ig2gc&hl= en & ei = pQl4Tb2IA42DhQf548D9Bg & sa = X & book = result & resnum = 5 & ved = 0CDYQ6AEwBDgU # v = onepage & q & f = false - 상속보다 합성을 선호합니다. –

+0

헤드 퍼스트 디자인 패턴을 예제를 위해 Java를 사용하여 좋은 소개로 추천하십시오. –

답변

5

기본 Airplane 클래스는 추상적이거나 인터페이스 일 수도 있습니다.

class Airplane{ 
//common attributes 
} 

class PassengerPlane extends Airplane{ 
//passenger plane specific attributes 
} 

class CargoPlane extends Airplane{ 
//cargo plane specific attributes 
} 

class Airport 
{ 
List<Airplane> airplanes; 
// do stuff with planes 

} 
+0

대단히 감사합니다. 이것이 제가 찾고 있던 것입니다. 공항 클래스에서 PassengerPlane의 특정 속성에 액세스하려면 어떻게해야합니까? 예를 들어, PassengerPlane1의 연료 레벨을 공항에서보고 싶습니다. 나는 시도했지만 비행기 클래스의 메소드 만 보여줍니다 (공항에는 비행기 목록이 있기 때문에). PassengerPlane 메소드에 액세스 할 수있는 방법이 있습니까? – EvanBlack

+0

아키텍처에 따라 다릅니다. 매우 단순한 레벨에서 비행기의 목록을 반복하여 'If (비행기의 instanceof PassengerPlane)'를 확인하고 비행기 인스턴스를 PassengetPlane pp = (PassengerPlane) 비행기로 캐스팅하고 PassengerPlane 특정 속성'pp.maxPassengers에 액세스 할 수 있습니다. '. –

+0

그게 잘됐다! 고맙습니다. – EvanBlack

1

클래스 비행기는 모든 비행기에서 공유하는 속성 만 가져야합니다. 등 fuelLevel 같은 것들,

그리고 다른 사람이 말했듯이, 특별한 속성은 서브 클래스로 이동합니다

간단한 상속 함께 놀러 구문을 학습하기 위해
class Airplane { 
    int fuelLevel; 
} 

class CargoPlane extends Airplane { 
    int maxCapacity; 
} 

class PassengerPlane extends Airplane { 
    int maxPassengers; 
} 
+0

비헤이비어를 추가하는 하나 이상의 인터페이스는 어떻습니까? –

관련 문제