黑马程序员技术交流社区
标题:
oc继承总结
[打印本页]
作者:
a380vs747`
时间:
2015-3-25 15:51
标题:
oc继承总结
1、继承
子类继承父类,子类拥有父类当中的所有属性和方法。
当然,这里要探讨一下父类public、private、protected属性在继承时的区别。
* public:类之外都可以访问,公开程度最高。子类可以直接继承和访问。
*protected:默认的级别,只有在父类和子类、分类中可以拥有、访问。
*private: 私有的。只有父类可以直接访问。子类可以继承拥有该属性,但是子类的方法中不能直接访问该属性,需要调用父类方法来访问属性。
// 父类Person的声明文件
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
// public 就不举例了
@protected
int _age;
@private
NSString *_name;
}
@property int age;
@property NSString *name;
@end
// 子类Student的声明文件
#import "Person.h"
@interface Student : Person
- (void)setAge:(int)age; //正确,_age是protected,子类可以直接访问,重写方法可以
- (void)setName:(NSString *name); // 错误,_name是父类私有的,只能通过父类的方法访问该属性,不能在子类方法中直接访问
@end
int main()
{
Student *s = [[Student alloc] init];
s.age = 10;
s.name = @"Jack"; // 这个是可以的,因为调用的赋值方法是父类的赋值方法
return 0;
}
复制代码
2、继承的优势:
1)可以避免重复写一样的代码。(因此,当A类基本包括B类中所有的方法和属性时,就让B类作父类,比如A类是猫,B类是动物;或者A类和B类有很多一样的方法和属性时,可以把这些属性方法抽出,定义成C类,让A、B一起继承C类。比如A类是猫,B类是狗,那么可以抽取一样的作C类动物)
2)建立了类之间的联系。
3)子类可以直接继承父类的属性和方法,并且调用。private除外
缺点就是耦合性太强,往往改动一个父类,会引起很多子类、分类的变化。
3、继承的使用的注意:
1)子类可以重写父类的方法,但是private属性除外。代码运行时,会先到子类中找方法,找不到会向上一级父类中找,依次类推,直到找到根类。
2)子类中不可以有与父类相同的变量名。
4、当一个类完全拥有另外一个类作为其属性时,可以使用组合。假设有一个Book类,一个Student类。若每个学生都有一本书作为其属性,那么学生属性的声明可以使用组合。
@interface Student :NSObject
{
Book *_book;
}
@end
5、在子类的方法中,可以使用super,直接调用上一层父类的方法。假设父类动物类,有吃的方法,使体重加一。
- (void)eat
{
_weight += 1;
}
子类狗中,也有吃的方法,不仅吃完体重加一,还会叫两声;
- (void)eat
{
[super eat];
NSLog(@"叫两声");
}
作者:
Errors
时间:
2015-3-25 21:46
还有一点,默认情况下,成员变量都是protected的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2