2010-12-03 2 views
0

인스턴스 변수 유형이 다른 클래스를 처리 할 수 ​​있습니까? 의 내가 두 INT 인스턴스 변수가있는 클래스가 있다고 가정하자의 그들을 부르 자 :클래스에 대한 여러 인스턴스 변수 유형?

@interface ClassA: NSObject { 
    int x; 
    int y; 
} 
@end 

을 내가 그렇게처럼 같은 인스턴스 변수에 대한 다른 유형을 처리하기 위해 그것을 가능성을 제공하는 확장하려는 동시에 :

@interface ClassB: ClassA { 
    double x; 
    double y; 
} 

이것도 가능합니까?

+0

시도해 보셨습니까? –

+0

x 및 y에 id 데이터 유형을 제공하지 않는 이유는 무엇입니까? –

+0

@Dave Delong. 나는 그것을 시도했다, 나는 단지 주위의 옵션을 알고 싶었다. 나는 두 클래스에서 메소드를 재정의 할 수 있다는 것을 알고있다. 난 그냥 왜 인스턴스 변수의 유형을 변경할 때 중복 오류가 발생하는지에 대한 더 나은 설명을 찾고있었습니다. –

답변

1

나는 당신이 두 가지 이유로 할 수 없어 확신 : 당신은 인스턴스 변수를 반복 할 수 없습니다

  1. (int x, double x).
  2. 한 클래스에서 상속하는 것은 매우 간단하지만 인스턴스 변수의 유형을 변경하려고합니다.

이러한 사용 사례에 대해 별도의 클래스를 만들고 싶지 않은 경우 추상 수퍼 클래스가 작동 할 수 있습니다. 당신이 해결하려고 노력하는 것에 대해 더 많이 알고 있다면, 나는이 분야에서 좀 더 도움이 될 수 있습니다.

Objective-C가 지원하지 않는 파라 메트릭 다형성이 정말로 원하는 것처럼 보입니다. NSNumber 패밀리와 같은 특정 코코아 클래스는 추상적 인 수퍼 클래스와 많은 구체적인 서브 클래스를 사용합니다 (질문에 설명하는 것처럼). 그런 다음 논리는 추상과 특정 사이에서 적절하게 분리됩니다. 이것은 코코아의 클래스 클러스터 디자인 패턴입니다. 이는 C++ 및 Haskell과 같은 언어의 매개 변수 다형성에 대한 약화되고 임시 답변입니다.

+0

obj-c에 들어가기 시작했습니다. 클래스를 확장하기 위해 인스턴스 변수를 재정의 할 수 있기 때문에, 유형을 변경할 수도 있습니다. –

+1

Objective-C에는 회원이 없습니다. 인스턴스 변수 만. :) – bbum

+1

클래스를 확장 할 때 인스턴스 변수를 다시 정의 할 수 있다는 것을 알지 못했습니다. _methods_ 인스턴스를 다시 정의 할 수 있다는 것을 의미하는지 궁금합니다. 그건 사실입니다. Objective-C 클래스와의 거래는 실제로 그것들이 모두 C 구조체 일 뿐이며 구조체의 인스턴스 변수를 복제 할 수 없다는 것입니다. (나는 당신을 잘못된 길로 인도하지 않기를 희망합니다). –

1

아니요. "중복 구성원 'x'"및 "중복 구성원 'y'"이라는 컴파일 타임 경고가 표시됩니다.

관련 문제