1

导入类的头文件和继承类有什么区别?

人.h:

#import <Foundation/Foundation.h>

@interface Person:NSObject
{float fromPerson;}
-(void)inPerson;
@end

案例 1 - 在 Employee.h 中导入 Person.h

#import "Person.h"

@interface Employee:NSObject
{float fromEmployee;}
-(void)inEmployee;
@end

案例 2 - 将 Person.h 继承到 Employee.h

#import <Foundation/Foundation.h>
#import "Person.h"

@interface Employee:Person
{float fromInheritedEmployee;}
-(void)inInheritedEmployee;
@end
4

3 回答 3

3

显然,使用预处理器指令导入是预处理器的工作,它在实际编译之前运行。该指令被解释为“获取 Person.h的内容并将它们放在此处”,因此就像您将Person.h的内容复制并粘贴到Enployee.h中一样。

实际上,这使编译器知道Employee.h中包含的定义。因此,如果您使用Employee 类的对象(在Employee.h中声明),它将知道如何处理它。

这与继承无关,这是一个完全不同的过程,您应该仔细查看您最喜欢的 OOP 书籍或文档。

文件名是完全独立的,不要让它欺骗你。Person.h 可以称为Being.h并包含更高等生物的类定义,所有这些都在同一个文件中,然后导入它会将其定义放在文件 Employee.h中,这绝不会影响从哪个类 Employee继承。

于 2012-08-07T21:54:28.573 回答
2

导入头文件只是将其内容复制到当前文件,例如声明、宏、枚举等。

继承一个类意味着你现在声明的类是继承类的子类,例如Employee是一个Person。

于 2012-08-07T21:50:23.363 回答
1

#include 与 #import 的入门

导入(或包含)文件类似于在#import 语句的位置注入该文件的内容。

有趣的细节:

在 Objective-C 中,#import 比普通的 C #include 更智能,因为如果一个文件之前已经被注入到嵌入的#import 链中,那么它将不会再次被注入。普通的 C(预处理器)#include 不够聪明,无法弄清楚这就是为什么你总是看到像这样的结构

   #ifndef __FOO_H
   #define __FOO_H

   .... header content here ...

   #endif /*__FOO_H */ 

在 C 标头中确保单一包含,而您在目标 C 中看不到这样的构造。

这就是全部内容#import:内容注入机制。

所以,以你自己的例子为例,假设我想创建 Person 类的一个实例,我必须先#import 它的定义才能做到这一点。:

  /* main.m */

  #import "Person.h"

  int main(int argc, char *argv[]) {

            Person *person = [[Person alloc] init];  
            //^^^^^^^^ this won't work without the #import statement
            [person release];
            return 0;
  }

请注意,没有任何东西被继承,#import 只是Person在我们的 main.m 中注入使用该类所需的所有部分

继承入门

正如您可能已经知道的那样,继承是一种将新类定义为另一个类的扩展的机制。通常,新类是父类的子类(想想动物王国),但并非总是如此。

在您自己的示例中,您将 Employee 定义为 Person 的子类。

那么继承与#import 有什么关系呢?

好吧,为了将类用于您需要#import 其定义的任何内容,以便编译器知道您在说什么时说什么Person,这包括(双关语)创建派生类。

于 2012-08-07T22:41:59.800 回答