2010-04-13 4 views
1

나는 비행기 클래스를 상속 한 PassengerAirplane과 CargoAirplane이라는 두 클래스의 클래스를 가지고있다. 나는 Measurable 인터페이스와 그것을 구현하는 두 클래스 인 People과 Container도 가지고있다.
비행기는 자체적으로 많은 일을 할 수 있으며 측정 가능한 물건을 비행기에 추가 할 수있는 방법이 있습니다 (addAMeasurableThing이라고 함). PassengerAirplane/CargoAirplane과 비행기의 유일한 차이점은 addAMeasurableThing은 인체/컨테이너 만 받아 들여야하며 측정 가능한 것은 아닙니다. 어떻게 구현합니까? ( 위치를 INT, 측정 m)Java 상속 질문

공공 추상적 인 비행기 addAMeasurableThing;
비행기 클래스 :

나는 일을 시도

PassengerAirplane 클래스 :

공공 비행기 addAMeasurableThing (측정 m, INT 위치) {경우 (m 사람들 instanceof를 는) ...

CargoAirplane 클래스 :

공중 비행기 addAMeasurableThing (Meas 내가 그것을 디버깅 할 때 두 가지 방법이 동일해야하기 때문에 urable m, INT 위치) {(m

...) 컨테이너 instanceof를하지만, 나는 CargoAirplane 클래스의 addAMeasurableThing라는 결코 극복 것으로 나타났습니다 경우 서명. 따라서 PassengerAirplane/CargoAirplane의 addAMeasurableThing은 전달되는 측정 가능 유형에 따라 어떻게 호출 될 수 있습니까?

감사합니다.

+0

코드를 더 게시 할 수 있습니다. 다른 일이있을 수 있습니다. –

+0

예, 질문이 명확하지 않습니다. 당신은 무엇을 의미합니까 "CargoAirplane 클래스의 addAMeasurableThing은 결코 호출되지 않습니다. 왜냐하면 두 메소드 모두 같은 서명을 가지고 있기 때문입니다."테스트 클래스 구현은 무엇입니까? –

+0

메서드를 재정의 하시겠습니까? 왜냐하면 당신이 그렇게한다면, 당신이 묘사하는 문제가 없어야합니다. –

답변

6

사용 제네릭 :

abstract class Airplane<M extends Measurable>{ 
    public abstract Airplane addAMeasurableThing(M m, int position); 
} 

class PassengerAirplane extends Airplane<People>{ 
    @Override 
    public Airplane addAMeasurableThing(People p, int position{ ... } 
} 
+0

이것은 광고 된대로 작동했습니다! 감사. – Misa

0

예를 들어, 사용 후 측정 클래스는 일반적인 만들기로 찾고 시도하고 Measurable<People>, Measurable<? extends Foo>

+0

저는 Java에 익숙하지 않으므로 완전한 대답이 좀 더 도움이되었습니다. 감사. – Misa

0

호출되는 대상을 결정하는 매개 변수 유형이 아니라 개체 유형입니다. 따라서 PassangerPlane 또는 CargoPlane을 addAMeasurableThing을 호출하는 메서드로 만들거나 전달한 경우에 따라 다릅니다. 비행기에 들어가기위한 올바른 유형의 Measurables 만 가지고 있는지 확인하는 방법에 대한 더 큰 디자인 문제입니다. 예를 들어 잘못된 측정 값이 추가 된 경우 예외를 throw 한 다음 호출 스택을 더 올려 사용자에게 문제를 알릴 수 있습니다. 그것은 비행기에 전달되어야하는 측정 가능한 물체를 결정하는 것에 달려 있습니다.

또한 Airplane (또는 새로운 클래스 AirplaneFactory)의 정적 메서드를 사용하면 전달할 수있는 샘플 Mesurable에 따라 올바른 하위 클래스를 돌려 줄 수 있습니다.

+0

정말 도움이되었습니다. 고맙습니다. – Misa