2012-02-21 4 views
2
public abstract class SoftwareComponent { 

    private Set<Information> generateInfo = new HashSet<Information>(); 
    private Set<Information> consumeInfo = new HashSet<Information>(); 
    public Set<Infomation> getGeneratedInfo() { ... } 
    public Set<Information> getConsumedInfo() {....} 
} 

public class SensorDriver extends SoftwareComponent { 

} 

public class Information { ... } 

public class SensorMeasurement extends Information { } 

public class command extends Information {  } 

위의 코드는 내 프로그램 구조입니다. 이제 센서 드라이버는 의 모든 상위 클래스 메소드를 상속받습니다. 센서 드라이버에서 오버라이드 된 메소드의 범위를 제한하고 싶습니다.Java 상속에서 오버라이드 된 메소드의 범위를 제한하십시오.

한계는 입니다. "센서 드라이버"는 "센서 측정"정보 만 생성 할 수 있습니다. "센서 드라이버"는 "명령"정보를 사용할 수 없습니다.

+4

수 없습니다. 그것은 상속의 개념을 깨뜨릴 것입니다. 기본 클래스에서 수행 할 수있는 모든 작업을 수행하면 하위 클래스가 반드시 존중해야합니다. –

+0

나는이 질문을 이해할 수 없다. 아마도 당신의 말씨를 바꿀 수 있습니까? – Jivings

+0

질문 : "Java의 하위 클래스에서 재정의 된 메서드의 범위를 제한 할 수있는 방법이 있습니까?" – Pankesh

답변

2

당신은 일반적인 당신의 SoftwareComponent을하고 정보를 매개 변수 수 있습니다 :

public abstract class SoftwareComponent<I extends Information> { 

    private Set<I> generateInfo = new HashSet<I>(); 
    private Set<I> consumeInfo = new HashSet<I>(); 
    public Set<I> getGeneratedInfo() { ... } 
    public Set<I> getConsumedInfo() {....} 
} 

public class SensorDriver extends SoftwareComponent<SensorMeasurement> { 
} 
+0

감사합니다. Ozan, 당신의 솔루션은 제 코드에서 완벽하게 작동합니다. – Pankesh

+0

@ PankeshPatel : 환영합니다. 친절하게 대답하고 대답을 받아 들일 수 있다면? – Ozan

+0

죄송합니다 ozan, 전 stackoverflow (그냥 2 일 이전)입니다. 3 가지 평판이 있습니다. 이 정도의 명성으로 저는 표절 할 수 없습니다. 나는 그것을 정말로 유감스럽게 생각한다. :) – Pankesh

0

당신이 답변으로 단일 상속보고있는 때마다, 당신은 문제가 실행할 수 있습니다. 나는 당신이 실제로 인터페이스의 형태로 다중 상속을 사용하기를 원한다고 생각한다. 논리 클래스를 "그룹화"하는 인터페이스를 구현하는 특정 클래스 및 추상 클래스를 수행 할 수있는 인터페이스 선언을 고려해야합니다.

B가 A이면 모든 A를 상속받습니다. 그러나 B가 x, y 및 z를 제외하고 A이면 UnsupportedOperationException을 throw 할 수 있습니다. 이는 경우에 따라 허용됩니다 하지만 계층 구조를 약간만 재구성하여 모든 것이 더 합리적이라고 생각해야합니다.

관련 문제