Какова концепция наследования в Objective-C? - PullRequest
3 голосов
/ 27 сентября 2010

Я новичок в Objective-C и хочу знать о наследовании. Я знаю о концепциях, но путаюсь с методами, которые программист использует для наследования класса.

У меня есть два класса: класс A и класс B, и я хочу сделать B дочерним для A.

Иногда программист использует #import "class A", а иногда использует знак @. Какой из них следует использовать и почему? Есть ли разница между их использованием?

Другой вопрос, который у меня возникает, касается знака ":", который мы пишем после объявления класса, например @interface class_A : class_name

В прошлом я изучал Java и C #, и их наследование сходно друг с другом. Но является ли Objective-C (я сейчас работаю на iPhone) таким же?

Ответы [ 2 ]

4 голосов
/ 27 сентября 2010

Между этими терминами есть разница, и я вижу, где твоя путаница.

#import используется для загрузки определений h-файла класса. В некотором смысле это похоже на ключевое слово using в C #, но в Objective-C нам нужно указать все на уровне класса, а не на уровне пространства имен - в Objective-C нет концепции инкапсуляции на уровне пространства имен.

Ключевое слово @class используется всякий раз, когда вам нужно объявить, что объект действителен - но если вы собираетесь использовать внутренности этого объекта, вам в конечном итоге все равно нужно будет добавить #import класса. Здесь есть отличный ответ на разницу между @class и # import .

Как и в C # и Java, наследование достигается с помощью оператора: в вашем h-файле. Итак, в вашем объявлении класса B оно должно выглядеть следующим образом:

@interface Class_B : Class_A

Надеюсь, это все прояснит.

обновление для вашего комментария:

Допустим, я хочу наследовать класс A в класс B и где-то использовать класс C в качестве переменной. Для работы вам понадобится ff:

#import "Class_A.h"

@class Class_C;

@interface Class_B : Class_A {
    Class_C *myvariable
}

Теперь, скажем, где-то внутри вашего файла вам нужен доступ к члену Class_C, например, myvariable.Property1, это время, когда вы превращаете @class Class_C в #import "Class_C.h".

Не думаю, что объявляю это так:

@class Class_A;

@interface Class_B : Class_A

будет работать ... вам все равно понадобится #import "Class_A.h" где-нибудь, что делает объявление @class несколько избыточным.

0 голосов
/ 04 января 2012

если мы делаем это

@interface Class_B : Class_A

означает, что мы наследуем Class_A в Class_B, в Class_B мы можем получить доступ ко всем переменным class_A.

, если мы делаем это

#import ....
@class Class_A
@interface Class_B

здесь мы говорим, что мы используем Class_A в нашей программе, но если мы хотим использовать переменные Class_A в Class_B, мы должны #import Class_A в файле .m (создать объект и использовать его функцию и переменные).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...