A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© L503254118 中级黑马   /  2015-10-15 18:17  /  747 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一.封装
当定义了一个类时,类中的数据不允许外界访问,或者允许外界只能读取不能修改而需要隐藏时,就需要用到 set方法或者get方法。
1.写方法(setter) - 给成员变量赋值OC中的规范:
(1)一定没有返回值
(2)一定是对象方法(-)
(3)方法名一定是以set开头 格式:set + 去掉下划线的成员变量名的首字母大写
(4)一定有参数,参数的类型一定是和成员变量类型一致
(5)形参的名称一般建议是 去掉下划线的成员变量名
(6)写方法的实现中,一定是给成员变量赋值
​2.读方法(getter) - 读取成员变量的值 规范:
(1)一定是一个对象方法
​(2)一定有返回值
​(3)方法名一定是 去掉下划线的 成员变量名
​(4)一定没有参数
​(5)方法的实现中:一定是返回值成员变量名
例如:
#import
@interface Dog:NSObject
{    int _speed;  }       //声明成员变量
-(void)setSpeed:(int)speed;  //声明setter方法
-(int)speed;       //声明getter方法
-(void)run;       //声明run方法
@end
@implementation Dog
-(void)setSpeed:(int)speed{  //实现setter方法
    _speed=speed;
}
-(int)speed{       //实现getter方法
    return_speed;
}
-(void)run{        //实现run方法
    NSLog(@"狗正在以%d码的速度奔跑。",[selfspeed]);
}      //打印的时候调用了 getter 方法
@end
int main(int argc, constchar * argv[]) {
    @autoreleasepool {
        Dog *dog=[Dognew];   //实例化一个Dog 对象
        [dog setSpeed:230];     //调用setter方法给成员变量赋值
        [dog run];       //调用 run 方法
       }
    return0;
}
程序运行结果:狗正在以230码的速度奔跑。

二、继承
继承的标识为英文的“:”冒号,使用继承可以定义一个具有父类所有功能(成员和方法)的新类,它继承了父类的功能。
为何要使用继承?
将所有重复的内容合并在一起,可以使代码有效率,简洁,才意味着是一个成功的架构。否则,修改代码时需要修改多处,就很容易出错。
1.继承的根类
大多都继承自 NSObject 类,所以在定义一个类时,要继承NSObject 类。
2.使用注意
(1)先有父类才有子类
(2)许子类中不能有和父类中相同名称的成员变量
(3)子类的实例化对象 可以调用弗雷的方法​
(4)子类可以重写父类方法,当调用子类时优先调用子类方法
例如:
@interface bigYellowDog : Dog  //父类为Dog
    -(void)eat;             //子类中定义一个吃的方法
@end
@implementation bigYellowDog
(void)eat{
NSLog("大黄狗正在吃东西");
}            //实现子类中eat 的方法
@end
int main(int argc, constchar * argv[]) {
    @autoreleasepool {
        bigYellowDog *byd=[bigYellowDognew];  //实例化一个bigYellow 对象
        [byd setSpeed:250];     //调用父类的setter方法给成员变量赋值
        [byd run];       //调用父类的 run 方法
    }
    return0;
}
​程序运行结果:狗正在以250码的速度奔跑。
从程序的运行结果看出,Dog 的子类确实继承了 Dog类中所定义的 成员变量 以及方法的声明及实现
三、多态
多态的条件:  有继承关系、有方法重写(如果没有方法的重写可以用强制转换的方式)
父类的声明变量指向子类对象。
1.多态的表现形式:
父类指针指向了子类对象
2.多态的好处
多态的主要好处就是简化了编程接口。它容许在类和类之间重用一些习惯性的命名,而不用 为每一个新加的函数命名一个新名字。这样,编程接口就是一些抽象的行为的集合,从而和实现 接口的类的区分开来
​例如:
#import
@interface Dog:NSObject
-(void)run;       //父类声明run方法
@end
@implementation Dog
-(void)run{        //父类实现run方法

    NSLog(@"小黑狗狗正在以300码的速度奔跑。");
}
@end
@interface bigYellowDog : Dog  //继承父类Dog
@end
@implementation bigYellowDog
-(void)run{      //重写父类run方法
NSLog(@"大黄狗,跑不动了。。。");
}
@end
int main(int argc, constchar * argv[]) {
    @autoreleasepool {
Dog *dog=[bigYellowDognew];  //使父类指针指向子类对象
        [dog run];    //父类对象调用run方法
    }
    return0;
}
程序运行结果:大黄狗,跑不动了。。。
从程序运行结果可以看出父类的指针确实是调用了子类的方法。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马