继承
1. 继承的目的
儿子类想拥有父亲类所有的成员,但是又不想自己去定义,而是想凭空拥有。
2. 继承的语法
如何让1个类认另外1个类为爹,因为想拥有爹类中的所有的东西。
语法:
@interface 类名 : 父亲类的名称
@end
3. 继承效果
儿子类一旦从父亲类去继承,那么儿子类中就拥有了父亲类中的所有成员。
4. 几个术语
@interface Student : Person
1)Student类从Person类继承,Student类是Person类的子类,Person类是Student类的父类!
2)Student类从Person类派生,Student类是Person类的派生类,Person类是Student类的基类!
5. 使用继承的注意与满足继承的关系
1)在新创建类模块的时候,指定父类
Xcode就会自动的帮助,完成一些列的事情。
2)继承是类在继承,而不是对象在继承。
子类从父类继承,子类中就拥有了父类中定义的所有的成员,只是类继承。
我们创建对象,对象与对象之间是毫无关系的。
3)什么时候应该使用继承?
如果发现另外1个类中成员我也想有,那么这个时候就可以使用继承。
但千万不能乱继承!为了继承而继承!
凡是满足 is a 关系的类 就可以用继承的关系
即当A类是1个B类的时候,那么A类就可以从B类继承,
例:
学生 -> 人
电风扇 -> 电器
汽车 -> 交通工具
学生 -> 狗 (就是乱继承!)
4)如果有1个成员不是所有的子类都拥有的,那么这个成员就不应该定义在父类当中。因为一旦定义在父类当中,那么所有的子类全都有了。
父类中只定义所有的子类都拥有的。只要不是所有的子类都拥有的,那么就不应该定义在父类当中。
6. 继承的特点
1)单根性
1个类有且只能有1个父类。
1个类不能有多个父类!
2)传递性
A类从B类继承,B类又从C类继承。
那么A类就同时拥有B、C类的成员!
7. NSObject 类。
是Foundation框架中的类,在这个类中有1个方法new,这个方法是用来创建对象的。方法的返回值是创建的这个对象的指针。
也就是说,如果要创建类的对象,就必须要调用这个new方法。
如果我们想要让我们的类具备创建对象的能力,就必须要让我们的类直接的或者间接的从NSObject类继承!
如果不去从NSObject类中继承,那么你创建的这个类就无法创建对象,也就没有任何意义了。
在NSObject类之中,还定义了1个属性,这个属性叫做isa指针。所以,每1个子类对象中都有一个叫做isa的指针。
所以说,NSObject类是OC中所有类的祖宗类,因为OC中的类全部都是直接的或者间接从它那继承。
8. 子类中不能存在和父类同名的属性
因为子类从父类继承,就意味着子类拥有了父类所有的成员,包括属性和方法。
也就相当于子类中其实已经定义了。
如果子类再定义1个同名的属性,很明显就冲突了。
9. super关键字
1)可以用在类方法和对象方法之中。
2)在对象方法中可以使用super关键字调用当前对象从父类继承过来的对象方法。
3)在类方法中可以使用super关键字调用当前类从父类继承过来的类方法。
a. 类方法也能被子类继承,所以,父类中的类方法,可以使用父类名来调用,也可以用子类名来调用。
b. 在子类的类方法中,可以使用super关键字调用父类的类方法。
4)super只能用来调用父类的对象方法或者类方法。不能用来访问属性!
10. 子类从父类继承
1)相当于,子类模板当中,拥有了父类模板中所有成员。
2)创建1个子类对象,仍然是根据子类的模板来创建对象。只不过子类模板拥有父类模板中的成员。
所以,子类对象中既有子类的成员也有父类的成员。
3)super特指这个方法是从父类继承过来的!
super是指当前类或者对象的这个方法是从父类继承过来的。
所以当我们去调用的是父类的对象方法或者类方法的时候,建议去用super,而不用self!
11. 访问修饰符
用来修饰属性,可以限定对象的属性在哪一段访问。
1)4个访问修饰符
a. @private:私有的。
被@private修饰的属性,只能在本类的内部访问,也就是说只能在本类的方法的实现中访问。
b. @protected:受保护的。
被@protected修饰的属性,只能在本类和本类的子类中访问,也就是说只能在本类和子类的方法的实现中访问。
c. @package:
被@package修饰的属性,可以在当前框架中访问。
d. @public:公共的。
被@public修饰的属性,可以在任意的地方访问。
2)如果不为属性指定访问修饰符,那么默认的就是@protected。
3)如果父类的属性被@private修饰,子类仍然可以继承父类的私有属性,只不过,在子类当中无法直接访问从父类继承过来的私有属性。
但是如果父类中有1个方法在为属性赋值或者取值,那么子类可以调用这个方法间接的访问父类的私有属性。
4)访问修饰符的作用域
从写访问修饰符的地方开始往下,直到遇到另外一个访问修饰符或者结束大括弧为止。中间的所有的属性都应用这个访问修饰符。
5)使用建议:
a. @public 无论什么情况下都不要使用。属性不要直接暴露给外界。
b. @private 如果属性只想在本类中使用,不想在子类中使用,那么就使用它。
c. @protected 如果你希望属性只在本类和本类的子类中使用。那么就用它。
推荐使用默认的@protected!
6)访问修饰符只能用来修饰属性,不能用来修饰方法。
|
|