1、OC中如果类A继承类B,B就成为A的父类。那么B的成员全部属于A的成员。相当于A全部拥有了B的所有成员(所有变量与所有方法)。即子类拥有父类中所有的成员变量和方法。
2、继承的使用场合:
(1)如果有两个或者两个以上的类含有很多相同的成分(成员变量/方法相同)。那么就可以把它们相同的部分提取到一个单独的类中,让这些相似的类继承于它。继承的实质就是把多个类中相同的代码抽出来放到一个单独的类中,然后让这些多个类继承于它。
(2)当A类拥有B类中的部分属性和方法时,可以考虑让B类继承A类。
(3)当B是A的一种时,用继承,即B继承A。当B拥有A,A是B的一个组成部分时。继承是一种,即种类的关系;而组合是一部分,即拥有的关系。即当XXX是XX时用继承,当XXX拥有XX时用组合。
3、继承的好处:抽取重复的代码。建立了类之间的关系。
4、父类中必须继承自NSObject类,如果不继承这个类 任何类都没有创建对象的能力。当父类继承了NSObject,子类直接继承父类即可,相当于间接的继承了NSObject。(基本上所有的类都继承自NSObject根类,还有一根类NSProxy但基本上用不着)。
5、在OC类的继承中,直接继承NSObject的基类内部会有被加载进来的NSObject类指针(Superclass地址),即这个基类Superclass指针的值指向被加载进来的NSObject类所在内存的首地址。然后直接继承自这个基类的子类中会有它直接继承的父类的地址即Superclass,也就是这个基类的地址。也就是说每一个类都有一个Superclass指针指向它直接继承的父类(NSObject类或别的类),而每一个对象内部都有一个isa指针(指向直接创建这个对象的类),即由哪个类创建的这个对象那么这个对象内部的isa的值就是哪个类所占内存的首地址。(切记:如果这个类是根类例如NSObject,那么这个类的Superclass的值为NULL)。
注意:在首次用类创建对象时,切记是首次。即第一次用:[类名 alloc/new]来创建对象时会把这个类加载进内存。每个类只加载一次。即同一个类所创建的每个对象内部的isa指针都是相同的,都指向这个类。
6、在OC中,所谓的继承程单链继承,即单一继承。
7、id可以代替所有对象指针,id就是泛型。id在使用时也利用了动态绑定的原理。id在编译时是无法确定的,在将对象指针赋给id类型的变量后,利用id类型的变量调用方法时,id类型的变量会根据对象保存的isa指针(创建此对象的类的地址)来找到相应的方法列表进行调用。
8、OC中不允许子类和父类拥有相同名称的成员变量。但是方法可以相同(即重写:子类重新实现父类中的某个方法)。重写的好处是:覆盖父类以前的所有行为;
9、向上查找规