黑马程序猿_OC之三大特性
来源:互联网 发布:java c base64 编辑:程序博客网 时间:2024/06/10 00:14
1.封装
何为封装?封装是不在主方法里随便更改成员变量的值,把更改成员变量的值单独写一个方法出来,每次更改的时候调用这个方法,成为set方法。封装的好处是不让成员变量暴露在外面,随便被人修改,提高数据的安全性,也可以保证输入的变量值是符合逻辑的。而有些数据对于外界来说是只读的,只需要返回一个值,不需要传入一个值,此时可以写成get方法,get方法是为了得到对象的成员变量,只读成员变量则只提供get方法,不提供set方法。</pre><pre name="code" class="objc">#import <Foundation/Foundation.h>@interface Student:NSObject{ // @public 不能让随便修改值 int age;}- (void)study;//set方法,必须以set开头,set后面跟上成员变量的名称,成员变量的首字母必须大写,返回值一定为void,一定要接收参数,参数类型与成员变量的类型一致,形参的名称不能跟成员变量名一样- (void)setAge:(int)newAge;//get方法,返回对象内部的成员变量,肯定有返回值,返回值类型与成员变量类型一致,方法名与成员变量名一样,不需要接收任何参数- (int)age;@end@implementation- (void)study{ NSLog(@"%d岁的学生在学习",age);}- (void)setAge:(int)newAge{ //对传进来的参数进行过滤 if(newAge <= 0){ newAge = 1;} age = newAge;}- (int)age{return age;}@endint main(){ Student *s = [Student new]; [s setAge:10] [s study]; [s age]; return 0 ;}此外,为了区分成员变量、set方法的参数、get方法的名称,OC中的成员变量一定要以下划线_开头,上面那段代码修正后为:
@interface Student:NSObject
{
int _age;
}
- (void)study;
- (void)setAge:(int)age;
- (int)age;
@end
下面贴一段自己练手的代码:
#import <Foundation/Foundation.h>@interface Score:NSObject{double _c;double _oc;double _average;double _sum;}- (void)setC:(double)c;- (double)c;- (void)setOc:(double)oc;- (double)oc;- (double)average;- (double)sum;@end@implementation Score- (void)setC:(double)c{ _c = c;}- (double)c{ return _c;}- (void)setOc:(double)oc{ _oc = oc;}- (double)oc{ return _oc;}- (double)average { return (_c + _oc)/2;}- (double)sum{ return _c + _oc;}@end这个是老师要讲的一个题目,我自己之前写了一遍,发现自己写的时候最容易出错的就是命名不规范,成员变量名跟方法名都不准确,咋一看不知道是什么意思,所以写名称的时候一定不能懒,最好把意思写全了。
2.继承
继承就是抽取重复代码,建立类之间的关系, 子类可以拥有父类中的所有成员变量跟方法,而基本上所有类的根类都是NSObject,这也是我们最开始的时候为什么声明类的时候都要加:NSObject
#import<Foundation/Foundation.h>@interface Person:NSObject //父类必须声明在子类前面{int _age;}- (void)setAge:(int)age;- (int)age;- (void)run; //父类可以只声明方法,留给子类去实现方法,+ (void)test;@end@implementation Person- (void)setAge:(int)age{ _age = age;}- (int)age{ return _age;}- (void)run{ NSLog(@"人跑!");}+ (void)test{NSLog(@"人test");}@end //不允许子类和父类拥有相同名称的成员变量,但是允许拥有相同名称的方法,@interface Teacher:Person @end@implementation Teacher- (void) run //重写:子类重新实现父类中的某个方法,覆盖父类方法以前的做法{NSLog(@"老师跑!");}+ (void)test{NSLog(@"老师test");}int main(){Teacher *t = [Teacher new];[t run];[Person test];return 0;}
3.多态
多态是指对象的多种形态,只有继承才有多态的概念,因为多态的语法体现是父类指针指向子类对象。
#import <Foundation/Foundation.h>@interface Animal:NSObject- (void)eat;@end@implementation Animan- (void)eat{ NSLog(@"Animal吃东西");}@end@interface Dog:Animal@end@implementation Dog - (void)eat //重写{ NSLog(@"Dog吃东西");}@end@interface Cat:Animal@end@implementation Cat- (void)eat //重写{ NSLog(@"Cat吃东西");}@endint main(){ Dog *d = [Dog new]; Animal *a = [Dog new]; Animal *c = [Cat new]; [a eat]; //狗吃东西,调用方法的时候会动态检测对象的真实形态 [c eat]; //猫吃东西 return 0;}
0 0
- 黑马程序猿_OC之三大特性
- 黑马基程序员学习笔记_OC之三大特性之封装
- 黑马程序员_OC语言之面向对象的三大特性(封装、继承、多态)
- 黑马程序员_oc面向对象三大特性
- 黑马程序员_OC面向对象的三大特性
- 黑马程序猿_OC之Foundation简括
- 黑马程序员_OC面向对象的三大特性之封装及OC中类方法和self的使用
- 黑马程序员_OC基础04_面向对象三大特性
- 黑马程序猿_OC之核心语法(上)
- 黑马程序猿_OC之核心语法(下)
- 黑马程序猿_OC之block与protocol
- 黑马程序猿_OC之类与对象
- 黑马程序猿_OC之内存管理
- 黑马程序员--java三大特性之继承
- 黑马程序员----------面向对象三大特性之继承
- 黑马程序员 面向对象及三大特性之封装
- 黑马程序员——OC三大特性之封装
- 黑马程序员:OC学习日记之三大特性
- 一点心得体会
- 在Linux(ubuntu10.10)系统中使用摄像头之USB摄像头
- hdu 4472 dp
- csu 1503: 点到圆弧的距离-湖南省第十届大学生计算机程序设计竞赛
- 程序员生存定律--升华成高手的可能方法
- 黑马程序猿_OC之三大特性
- 局部内部类访问局部变量的问题
- C语言 return多值的解决方案
- 小编程题之检测字符串表达式中括号是否配对
- php计算抽奖的概率
- elasticsearch时间格式索引管理工具: curator
- UVA - 10057 A mid-summer night's dream. 子序列
- 安装commerce_kickstart全记录
- 动态开辟二维数组,初始化二维数组指针