——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
类和对象
面向对象编程中有两个重要的概念:类和对象。对象就是根据类创建出来的。
类是抽象的不是具体的某一个事物,它描述了事物的属性和功能,我们根据类的描述便可以创造出一个具体的对象。就像现实生活中我们画图纸设计一辆
车,图纸上包括车的属性:轮子数、时速、等等,以及车的功能(行为):启动、跑、倒车、熄火、等等,这个就相当于面向对象编程中的类。我们可以
根据图纸的设计制造出具体的事物:汽车,这相当于面向对象编程中的对象。
类的设计
我们在类的设计时,必须关心三个方面:事物名称(类名)、属性(成员变量或称实例变量)、行为(方法)。
比如设计一个人类:
事物名称(类名):人(person)
属性(成员变量):身高(height)、年龄(age)
行为(方法):跑(run)、跳(jump)
类名有几点要注意:1.类名的第一个字母必须是大写;2.类名当中不能带有下划线;3.类名如果是由多个英文单词组成,则要使用驼峰标识
类的申明和实现
#import <Foundation/Foundation.h>//用#import关键词导入Foundation框架,是这个系统框架中的类库
@interface Car : NSObject/*@interface 表示我们要声明一个类,后面跟类名,":"后面跟的是基类名,所有的类都继承它,它封装了一些东西供继承它的子类使用*/
{
int wheels;//声明成员变量即类的属性:表示也整型车轮数
int speed;//表示汽车车速
}
- (void)run;//声明一个对象方法(行为),前面是“-”号则代表这是一个对象方法只能由具体的对象来调用
+ (void)test;//声明一个类方法,它可被类名直接调用,类方法不能直接访问成员变量
@end//@end意味着类的声明部分结束
@implementation Car/*@implementation表明这是类的实现部分,类的声明和实现可以分开写(不同的文件当中也可),但是声明必须在main函数前面*/
- (void)run
{
NSLog(@"车子跑");//类的实现里面通常写方法怎么来完成该动作
}
+ (void)test
{
NSLog(@"做模拟实验");} //NSLog表示输出
@end//@end表明类的实现结束
OC 面向对象的实现
#import <Foundation/Foundation.h>
@interface Car : NSObject
{
@public
int wheels;
int speed;
}
- (void)run;
+ (void)test;
@end
@implementation Car
- (void)run
{
NSLog(@"%d个轮子的车跑起来了时速达%d公里每小时", wheels, speed);
}
+ (void)test
{
NSLog(@"做模拟实验");
}
@end
int main()
{
[Car test];//用类名直接调用类方法,不依赖于对象
Car *car;//声明一个指向Car类型的指针变量
car = [Car new];//调用类的方法,直接赋值给指针变量car
car->wheels = 4;//car类型变量直接指向wheels并直接赋值为4
car->speed = 200;//给成员变量speed赋值为200
[car run];//用调用对象方法,让汽车跑起来了
return 0;
}
类方法和对象方法的区别
1.类方法:
1> 以加号“+”开头;
2> 只能由类名调用,对象不能调用;
3> 类方法中不能直接访问成员变量(实例变量);
4> 可以在类方法中通过调用对象方法访问成员变量;
5> 当不需要访问成员变量的时候尽量用类方法。
对象方法:
1> 以减号“-”开头;
2> 只能由对象调用,没有对象,这个方法根本不可能被执行;
3> 对象方法能访问实例变量。
oc语言中的方法与函数的区别:
1. oc方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。不能独立于类存在;
2. 函数不属于类,跟类没有联系,函数只归定义函数的文件所有;
3. 函数不能访问oc对象的成员变量,指向对象的指针可以作为函数的返回值也可以作为函数的参数。
@try 在oc异常捕捉机制
异常:程序的运行的时候有bug 捕捉机制,排除错误
@catch
捕捉具体的异常类型 捕捉一个比较重要的异常类型
@finally
不管有没有异常都会执行该命令
类的基本语法
类 的声明(规定的当前的类名,属性,行为)语法
@interface 类名:父类名
{
//定义类的属性
}
//类的行为(必须写在大括号外)
@end
类的实现(实现具体的行为)
@implementation类名
//行为的具体实现
@end