我是Objective-C的新手,想了解继承。我知道这些概念,但与程序员用来继承类的方法相混淆。
我有两个班级:A班和B班,并希望B成为A的孩子。
有时程序员使用#import "class A"
,有时会使用@
符号。应该使用哪一个,为什么?它们的用途有什么区别吗?
我的另一个问题是我们在课堂声明后写的“:
”符号,例如@interface class_A : class_name
过去我是Java和C#的学生,他们的继承是相似的。但Objective-C(我目前在iPhone上工作)是一样吗?
答案 0 :(得分:4)
这些术语之间存在差异,我可以看出你的困惑在哪里。
#import
用于加载类的h文件的定义。这在某种程度上类似于C#的using
关键字,但在Objective-C中我们需要在类级别而不是在命名空间级别中指定所有内容 - 在Objective-C中没有命名空间级别封装的概念
只要您需要声明对象有效,就会使用@class
关键字 - 但如果您要使用该对象的内部,则最终需要添加#import
无论如何这个班级。 the difference between @class and #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
声明有点多余。
答案 1 :(得分:0)
如果我们这样做
@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中我们必须在.m文件中#import Class_A(创建一个对象并使用它的函数和变量)。