아래 코드는 의사 코드입니다. 과일을 만드는 공장 방법이있는 "과일"클래스를 상상해보십시오.Objective-C 기본 : 하위 클래스 지정 및 멤버 변수 액세스 가능성
interface Fruit
{
}
+(Fruit*) createFruit:
{
return [[Fruit alloc] init autorelease];
}
지금은 애플을 얻기 위해 과일을 서브 클래 싱 할 :
interface Apple : Fruit
{
int iSeeds;
}
+(Apple*) createAppleWithColor: (int) iSeeds
{
Apple* oApple = [Apple createFruit:];
oApple.iSeeds = iSeeds;
return oApple;
}
질문 :
- 가 어떻게 그것이 외부에서 변경할 수 없습니다 "iSeeds"개인 있도록 만들 수 있습니까? "비공개"키워드를 추가하면 더 이상 생성되지 않습니다.
- 여전히 Apple의 공장 방법에서 iSeed를 설정하고 싶습니다.
- 사용자가 iSeeds의 내용을 읽을 수있게하고 싶습니다. 그래서 나는 getter를 가져야한다고 생각하지만 작동하도록 할 수는 없습니다. 나는 항상 "LValue assignment"에 관해 약간의 오류를 얻는다.
- 과일의 생성 과일은 자동 방출을 사용하고 있습니다. 애플은 아무것도 준비하지 않았습니까?
르네
편의 생성자는 일반적으로 단지'fruit' 것 : 물론
, 당신은 -initWithSeeds를 호출 한 후 iSeeds에 적합한 기본값을 제공하고 애플에 대한 초기화 방법을 제공해야합니다. – Chuck
@Chuck, 동의 함. 방금 명명 컨벤션을 체크 아웃하는 링크를 추가했습니다. –
알겠습니다. 나는 아직도 배울 것이 많다. 명명 규칙에 관해 : 나는 그들과 함께 살 수 있는지 알아야 할 것입니다. 나는 C#에서 왔고 현재이 모호한 ObjectiveC 스타일을 받아들이 려하지 않지만 결국에는 그것을 채택 할 것입니다. :-) 나는 전혀 얻지 못하는 것들 : "createAppleWithColor"는 애플 클래스의 한 메서드입니다. 왜 애플의 iSeed 멤버에 액세스 할 수 없습니까? C#에서는 메서드가 정적인지 여부는 중요하지 않지만 여전히 클래스의 멤버입니다. – Krumelur