2013-01-06 2 views

답변

1

질문을 올바르게 이해하면 size 메서드와 다르게 반응하는 형질을 상속하는 클래스가 있습니까? 그러면 믹스 인 대신 컴포지션을 사용하는 것보다이 모호성을 해결할 방법이 없습니다.

class InMemoryStorage 
    def mainStorage: StorageTrait 
    def auxStorage: YetAnotherStorageTrait 

    def mainSize = mainStorage.size 
    def auxSize = auxStorage.size 
} 

그런가요?

+0

실제로, 나는 메소드 구현을 "바인딩"하는 방법을 찾고 있습니다. 따라서 StorageTrait를 통해 클래스에 액세스 할 때마다 하나의 "크기"가 사용되고 "YesAnotherStorageTrait"를 통해 액세스되는 경우 다른 구현이 사용됩니다. InMemoryStorage 유형의 인스턴스에서 "크기"를 호출 할 수없는 경우 페널티를 지불 할 준비가되었습니다.별로 의미가 없기 때문입니다. – jdevelop

+1

그건 불가능합니다. 같은 서명으로 메소드를 "오버로드"할 수는 없습니다. 둘 다 섞인다면, 어느 것이 'size' 메소드를 오버라이드 (override)하는지 선언해야한다. 독립적으로 동작하도록하려면 개인 크기 방법을 사용해야합니다. 여전히 공용 크기 메서드를 모호하게 남겨 두므로 실제로이 작업을 수행하지 않아야합니다. 위의 구성의 문제점은 무엇입니까? 'mainStorage'를 호출하면 올바르게 크기가 사용되며'auxStorage'에도 해당됩니다. –

+0

괜찮아, 고마워, 지금은 분명해 – jdevelop

관련 문제