Objective-C中的继承概念是什么?

时间:2010-09-27 06:34:38

标签: objective-c inheritance

我是Objective-C的新手,想了解继承。我知道这些概念,但与程序员用来继承类的方法相混淆。

我有两个班级:A班和B班,并希望B成为A的孩子。

有时程序员使用#import "class A",有时会使用@符号。应该使用哪一个,为什么?它们的用途有什么区别吗?

我的另一个问题是我们在课堂声明后写的“:”符号,例如@interface class_A : class_name

过去我是Java和C#的学生,他们的继承是相似的。但Objective-C(我目前在iPhone上工作)是一样吗?

2 个答案:

答案 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(创建一个对象并使用它的函数和变量)。