------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
继承好处:
1.抽取重复代码2.建立了类之间的关系
1.子类可以拥有父类中的所有成员变量和方法
不允许子类和父类拥有相同名称的成员变量
调用某个方法时,优先在当前类中找,如果找不到就去父类找
重写:子类重新实现父类的某个方法,覆盖以前的做法
耦合性太强
---------继承和组合———
Score *_score;
————super—————
直接调用父类中的某个方法
super处在类方法中,那么久会调用父类的类方法
使用场合,子类重写父类的方法时保留父类的一些行为
————多态————
1.没有继承就没有多态
2.代码的体现:父类类型的指针指向子类对象
3.好处:如果函数|方法参数中使用的是父类类型,可以传入父类、子类对象
4.局限性:父类类型的变量不能直接调用子类持有的方法(强转为子类类型)
以上概念根据黑马入学视频学习整理所得.
概念不多说,下面看我写的这个综合实例你就会觉得一切是如此的简单.
封装,继承,多态综合实例:
#import <Foundation/Foundation.h>
@interface Animal : NSObject
{
int _age; // 封装对象 _age 可读可写
}
- (void)test1; // 声明测试方法
- (void)setAge:(int)age; // age 的 setter方法 实现可写
- (int)age; // age 的getter方法实现 实现可读
@end
@implementation Animal
- (void)setAge:(int)age // 实现可写
{
_age = age;
}
- (int)age // 实现可读
{
return _age;
}
- (void)test1 // 实现测试方法
{
[self setAge:10]; // 设置age 值为10
NSLog(@"Animal-test1 年龄为%d",[self age]); // 打印age值
}
@end
@interface Dog : Animal // 继承
- (void)test1; // 声明test1方法
@end
@implementation Dog
- (void)test1 // 实现test1方法
{
[self setAge:11]; // 设置age值
NSLog(@"Dog-test1 年龄为%d",[self age]); // 打印age值
}
@end
int main()
{
Animal *a = [Dog new]; // 多态 用父类指针指向子类对象
//多态局限性:父类类型的变量不能用来调用子类的方法
[a test1]; // 不建议这么调用,虽然能调用成功
Animal *a2 = [Animal new]; // 创建Animal对象
[a2 test1]; // 调用 Animal的test1方法
Dog *a3 = [Dog new]; // 创建Dog对象
[a3 test1]; // 调用 Dog的test1方法
return 0;
}
小小的程序用到了OC的封装继承和多态,有没有感觉好不可思议呢?OC就是如此的简单实用,为学OC加油!为自己加油!