黑马程序员———OC基础语法(二)---三大特性
来源:互联网 发布:apache虚拟主机别名 编辑:程序博客网 时间:2024/06/01 19:22
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一、封装
更加接近人类的思考方式;
只需要关注对象,不需要关注步骤。
函数和方法都是代码段的封装:
方法主要分两种:
对象方法:
1.减号 “-”开头;
2.只能由对象调用;
3.对象方法中能访问当前对象的成员变量;
例: - (void)test;
类方法:
1.类方法都是以 “+”开头
2.对象只能调用对象方法,不能调用类方法;
3.类只能调用类方法,不能调用类方法;
例: + (void)test1;
类方法的好处和使用场合:
1.不依赖于对象,执行效率高;
2.能用类方法尽量使用类方法;
3.场合:当方法内部不需要使用成员变量时,就可以改为类方法;
工具类:基本没有任何成员变量,里面的方法基本都是类方法。
注:类方法可以和对象方法同名。
self(关键字):self是指针,
指向了方法调用者,代表着当前对象。
self的的用途:
1.概念:指向了当前对象\类(方法调用者);
2.在对象方法中可以利用"self->成员变量名" 来访问当前对象内部的成员变量;
3.[self 方法名] 可以调用其他对象方法\]类方法;
相当于java中的this指针。
二、继承
: 类名,继承了该类,相当于拥有了该类里面的所有的成员变量和方法。
oc中,不允许子类和父类拥有相同名称的成员变量,java中可以。
重写:子类重新实现父类中的某个方法,覆盖父类以前的做法。
注意:
1.父类必须声明在子类的前面;
2.子类不能拥有和父类相同的成员变量;
3.调用某个方法时,优先去当前类中找,如果找不到,去父类中找。
继承的使用场合:
1.当两个类拥有相同属相和方法的时候,就可以将相同的东西抽取到同一个父类中;
2.当A类拥有B类中的部分属性和方法时,可以考虑让B类继承A类;
3.继承: 子类名 是 父类名(这话要符合逻辑思维)。
当子类名 不是 父类名 时,选用组合:子类 拥有 父类(符合逻辑思维)。
继承的好处:
1.不改变原来模型的基础上,拓充方法;
2.建立了类与类之间的联系;
3.抽取了公共代码;
继承的坏处:耦合性太强。
super(关键字)
super的作用:
1.直接调用父类中的某个方法
2.super处在对象方法中,那么就会调用父类的对象方法,
Super处在类方法中,那么就会调用父类的类方法;
3. 使用场合:子类重写父类的方法是想保留父类的一些行为。
三、多态
多态:父类指针指向子类对象。
例: Animal *a = [Dog new];
父类指针访问对应的属性和方法,调用方法时会检测对象的真实形象。
动态绑定:在运行时根据对象的类型确定动态调用的方法。
好处:如果参数中使用的是父类类型,可以传入父类、子类对象
例: void feed(Animal *a)
{
[a eat];
}
用父类接收参数,节省代码。
多态的局限性:父类类型的变量不能用来调用子类的特有方法编译有警告。
可以考虑强制转换:
例: Animal *aa = [Dog new];
Dog *dd = (Dog *)aa; //类似基本数据的强制转换
注:没有继承就没有多态。
四、NSString(字符串类)
最简单的穿件字符串的方式:
NSString *str = @"itcast";
NSLog(@"我在n%@上课",str);
创建OC字符串的另一种方式:
int age = 15;
int no = 5;
NString *name = @"jack";
使用静态方法创建字符串的方式:
NSString *newStr = [NSString stringWithFormat:@"my age is %d and name is %@",age,name];
OC字符串是一个对象(可以用面向对象的方法操作字符串):
NSString *name = @"rose";
int size = [name length];//name.length;
注:length 方法算的是字数。 .length 默认输出 unsigend long 类型数据。
五、练习
类的合理设计:
typedef enum{
SexMan,
SexWoman//名称里带上枚举类型名,比较容易识别,规范
} Sex;
typedef struct{
int year;
int month;
int day;
} Date;
typedef enum{
ColorBlack,
ColorRed,
ColorGreen
} Color;
/*
学生
成员变量:性别、生日、体重、最喜欢的颜色、狗(体重、毛色、吃、跑)
方法:吃、跑、遛狗、喂狗
*/
#import <Foundaation/Foundation.h>
@interface Dog :NSobject
{
@public
Color curColor;
double weight;
}
- (void)run;
- (void)eat;
@end
@implementation Dog
- (void)eat;
{
weight+=1;
NSLog(@"狗吃完这次后的体重是%f",weight);
}
- (void)run
{
weight-=1;
NSLog(@"狗跑完这次后的体重是%f",weight);
}
@end
@interface Student : NSobject
{
@public
Sex sex;
Date birthday;
double weight;
Color favColor;
char *name ;
//重点 OC中所有对象都是指针
Dog *dog;
}
- (void)eat;
- (void)run;
- (void)print;
- (void)weigou;
- (void)liugou;
@end
@implementation Student
- (void)eat;
{
weight+=1;
NSLog(@"学生吃完这次后的体重是%f",weight);
}
- (void)run
{
Weight-=1;
NSLog(@"学生跑完这次后的体重是%f",weight);
}
- (void)print
{
NSLog(@"性别=%d,最喜欢的颜色=%d,姓名=%s,生日=%d-%d-%d",sex,favColor,name,birthday.year,birthday.month,birthday.day);
}
- (void)weigou
{
//让狗吃东西(调用狗的eat方法)
[dog eat];
}
- (void)liugou
{//让狗跑起来(调用狗的run方法)
[dog run];
}
@end
int main()
{
Student *s=[Student new];
Dog *d=[Dog new];
d->weight=30;
d->curColor=ColorGreen;
s->dog=d;
[s liugou];
[s weigou];
s->weight=50;
s->sex=SexMan;
//s->birthday ={2011,9,10};这种写法是错误的,在定义的同时才能初始化
Date d={2011,9,,10};//先定义一个变量并且初始化
s->birthday=d;
/*
s->birthday.year=2011;
s->birthday.month=9;
s->birthday.day=10;
这样写比较麻烦
*/
s->name="rose";
s->favColor=ColorBlack;
[s eat];//51
[s eat];//52
[s run];//51
[s run];//50
return 0;
}
类方法 计算器:
/*
设计一个计算器类
* 求和
* 求平均值
*/
#import <Foundation/Foundation.h>
//工具类:基本没有任何成员变量,里面的方法基本都是类方法
@interface JiSuanQi : NSobject
//求和
- (int)sumWithNum1:(int)num1 andNum2:(int)num2;
//求平均值
- (int)averageWithNum1:(int)num1 andNum2:(int)num2;
@end
@implementation JiSuanQi
- (int)sumWithNum1:(int)num1 andNum2:(int)num2
{
return num1+num2;
}
- (int)averageWithNum1:(int)num1 andNum2:(int)num2
{
int sum = [JiSuanQi sumWithNum1:num1 andNum2:num2];
return sum/2;
}
@end
int main()
{
int a = [JiSuanQi sumWithNum1:10 andNum2:20];
NSLog(@"a=%d",a);
int b = [JiSuanQi averageWithNum1:10 anNum2:30];
NSLog(@"b=%d",b);
return 0;
}
- 黑马程序员———OC基础语法(二)---三大特性
- 黑马程序员——OC基础三大特性
- 黑马程序员——OC基础——面向对象的三大特性(三)
- 黑马程序员————oc三大特性
- 黑马程序员—OC—三大特性
- 黑马程序员——OC三大特性之封装
- 黑马程序员——OC语言三大特性
- 黑马程序员——02OC三大特性
- 黑马程序员——OC三大特性-5:封装
- 黑马程序员——OC三大特性-6:继承
- 黑马程序员——OC三大特性-7:多态
- 黑马程序员—OC之三大特性
- 黑马程序员—OC语言面向对象三大特性
- 黑马程序员——OC语言(二)--面向对象三大特性
- 黑马程序员——OC基础——面向对象的三大特性(一)
- 黑马程序员——OC基础——类的三大特性(1)
- 黑马程序员——OC基础——类的三大特性(2)
- 黑马程序员——OC语言基础——面向对象三大特性之封装
- mysqldump备份与恢复数据库
- iOS CoreBluetooth 教程
- Android数据库高手秘籍(二)——创建表和LitePal的基本用法
- INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
- 关于从Domino外发的SMTP邮件地址形成的问题
- 黑马程序员———OC基础语法(二)---三大特性
- 第17周项目-体会函数参数传递
- Objective_C 基础知识学习笔记01
- Cocos2d-x lua shader使用
- linux——vim最常用的操作
- jsp和jspf的关系解说
- SQL常用函数
- 第十七周 OJ练习题---重复字符串
- centos获取内核源码,编译内核,编译内核模块