oc面向对象
来源:互联网 发布:重生之数据人生txt 编辑:程序博客网 时间:2024/06/08 00:56
OC面向对象:
封装,继承,多态,类方法,以及弱语法!!
main.m:
<pre name="code" class="objc">//// main.m// oc-面向对象//// Created by stevenchang on 9/14/15.// Copyright (c) 2015 cz. All rights reserved.//#import <Foundation/Foundation.h>#import "Student.h"#import "Teacher.h"#import "Person.h"#import "JiSuanQI.h"#import "Dog.h"#import "QQCar.h"int main(int argc, const char * argv[]) { /** 1.面向对象的封装特性: 作用: 对数据进行预处理; 避免外部对象随意调用属性,保证数据的安全性; 可以方便统一操作数据 */ //创建一个Student对象 Student *stu = [[Student alloc] init]; //设置年龄 //private [stu setAge:-2]; [stu setAge:3]; //设置体重 //public stu->weight = 20; //weight是public的,通过此种方式可以直接为weight赋值 //设置身高 [stu setHeight:-3.0]; NSLog(@"此时学生的年龄为:%d", stu.age); NSLog(@"此时学生的年龄为:%d", [stu age]); NSLog(@"此时学生的体重为%f",stu.weight); NSLog(@"此时学生的身高为:%f", stu.height); /** OC 弱语法: 没有申明和实现的方法只是警告 oc中的方法是动态检测: 在运行过程中才会检测对象有没有实现相应的方法 */ Person *person = [[Person alloc] init]; [person function];// [person hahah]; //在Xcode6.2中,如果类的声明中相应的函数的声明,编译器会自动进行提示说明// [person function1]; //没有声明,只有实现,运行时也会出错,编译和链接时只会出现警告 //[person function2]; //只有声明没有实现在,运行时会出现错误,编译和链接时只会出现警告 /* * self的用法 * 1> self 指向当前调用者 * 2> self对象方法中,表示对象;在类方法中,表示类 * 3> self可以访问成员变量 */ Teacher *tea = [[Teacher new] init]; //创建一个Teacher对象 [tea test]; [Teacher test]; //这是调用类方法 [tea test1]; [Teacher test2]; /** 类方法: + 表示是类方法 类方法不需要创建对象,类方法只能由类来调用[类名 方法名] 类方法中不能访问成员变量 类方法的执行效率比对象方法高,再oc开发中能用类方法尽量使用类方法 当方法中不需要使用成员变量时,改用类方法 */ int total = [JiSuanQI countTotalNum1:2 addNum2:89]; int average = [JiSuanQI averageNumd1:2 andNum2:8]; NSLog(@"和为%d,平均值为%d",total, average); /** 继承 避免重复代码,对于父类中的方法,可以直接使用 继承中我们还会经常使用一个关键字:super super可以用于调用父类中的方法 super指向当前调用者的父类 - 在对象方法中,则调用父类中对应的对象方法; + 在类方法中,则调用父类中对应的类方法 */ QQCar *qq = [QQCar new]; //创建一个QQ对象 [qq setPrice:23.4]; [qq setWheel:4]; //num1为public,num2为private //可以发现,对于子类来说,可以直接访问父类中public的成员变量, //不能访问private,protected的成员变量// qq->num1;// qq->num2; //因此对于子类来说,子类不是能够完全使用父类的成员变量,但是可以完全使用方法 [QQCar test]; //此test是父类中的类方法,使用子类直接可以进行调用 NSLog(@"车子的价格为%f,轮子为%d",qq.price, qq.wheel); /** 多态: 没有继承就没有多态,具有多种形态,例如:狗,既是狗也是动物 可以用一个父类指针变量指向多个子类对象 父类类型的变量是不能直接调用子类特有的方法,编译器会发生警告,必须强转为子类对象 */ Dog *dog = [Dog new]; [dog eat]; //Dog也是Animal类型,这个时候是动态绑定aa指向的真实对象 Animal *ani = [Dog new]; [ani eat]; //使用强制类型转换对ani进行类型转换 Dog *d = (Dog *)ani; [d eat]; return 0;}
Student.h
//// Student.h// oc-面向对象//// Created by stevenchang on 9/14/15.// Copyright (c) 2015 cz. All rights reserved.////引用了Foundation.h框架#import <Foundation/Foundation.h>//类的声明@interface Student : NSObject{ int no; //默认是protected,外界无法直接操纵属性 @public float weight; @private int age; @protected //这里写类的属性,默认是@protect,需要提供setter和getter方法 double height; }//对象方法,- 开头(返回值类型)函数名:......- (void)setAge:(int)newAge; //函数的声明- (int)age; //函数的声明- (float)weight;- (void)setHeight:(double)newHeight;- (double)height;@end
Student.m
//// Student.m// oc-面向对象//// Created by stevenchang on 9/14/15.// Copyright (c) 2015 cz. All rights reserved.////引入头文件"Student.h"#import "Student.h"//类的实现@implementation Student- (void)setAge:(int)newAge { if (newAge < 0) { //数据的过滤,对于所有小于0的年龄,值均设为0 newAge = 0; } age = newAge; //给age赋值}- (int)age { //返回age的值 return age;}- (float)weight { return weight;}- (void)setHeight:(double)newHeight { if (newHeight < 0) { newHeight = 0; } height = newHeight;}- (double)height { return height;}@end
Teacher.h
//// Teacher.h// oc-面向对象//// Created by stevenchang on 9/15/15.// Copyright (c) 2015 cz. All rights reserved.////import引用Foundation#import <Foundation/Foundation.h>//声明teacher : 表示继承@interface Teacher : NSObject//这里演示的都是self的用法- (void)test; //声明一个test方法+ (void)test; //声明一个test类方法,类方法可以与对象方法同名- (void)test1; //声明一个test1对象方法+ (void)test2; //声明一个test2类方法@end
Teacher.m
//// Teacher.m// oc-面向对象//// Created by stevenchang on 9/15/15.// Copyright (c) 2015 cz. All rights reserved.//#import "Teacher.h"@implementation Teacher- (void)test { NSLog(@"调用了对象方法test");}+ (void)test { NSLog(@"调用了类方法test");}- (void)test1 { [self test]; NSLog(@"调用了对象方法test1");}+ (void)test2 { [self test]; NSLog(@"调用了类方法test2");}@end
Person.h
//// Person.h// oc-面向对象//// Created by stevenchang on 9/16/15.// Copyright (c) 2015 cz. All rights reserved.////import 引用Foundation#import <Foundation/Foundation.h>//声明一个Person类 : 表示继承@interface Person : NSObject- (void)function; //声明一个函数- (void)function2;@end
Person.m
//// Person.m// oc-面向对象//// Created by stevenchang on 9/16/15.// Copyright (c) 2015 cz. All rights reserved.//#import "Person.h"@implementation Person- (void)function { NSLog(@"这是有声明和实现的方法");}- (void)function1 { NSLog(@"这是一个没有声明的函数");}@end
JiSuanQI.h
//// JiSuanQI.h// oc-面向对象//// Created by stevenchang on 9/16/15.// Copyright (c) 2015 cz. All rights reserved.////Import 引用Foundation#import <Foundation/Foundation.h>//计算器类的声明 : 表示继承@interface JiSuanQI : NSObject{ int _num;}//计算和+ (int)countTotalNum1:(int)num1 addNum2:(int)num2;//计算平均值+ (int)averageNumd1:(int)num1 andNum2:(int)num2;@end
JiSuanQI.m
//// JiSuanQI.m// oc-面向对象//// Created by stevenchang on 9/16/15.// Copyright (c) 2015 cz. All rights reserved.//#import "JiSuanQI.h"@implementation JiSuanQI+ (int)countTotalNum1:(int)num1 addNum2:(int)num2 { return num1 + num2;}+ (int)averageNumd1:(int)num1 andNum2:(int)num2 {// NSLog(@"%d",self->_num); 类方法中不能访问成员变量 int total = [self countTotalNum1:num1 addNum2:num2]; return total / 2;}@end
Car.h
//// Car.h// oc-面向对象//// Created by stevenchang on 9/16/15.// Copyright (c) 2015 cz. All rights reserved.//#import <Foundation/Foundation.h>@interface Car : NSObject{ //设置属性 int _wheel; double _price; @public int num1; @private int num2;}- (void)setWheel:(int)wheel; //设置轮子- (int)wheel; //获取轮子个数- (void)setPrice:(double)price; //设置价格- (double)price; //获取价格+ (void)test;@end
Car.m
//// Car.m// oc-面向对象//// Created by stevenchang on 9/16/15.// Copyright (c) 2015 cz. All rights reserved.//#import "Car.h"@implementation Car- (void)setWheel:(int)wheel { _wheel = wheel;}- (int)wheel { return _wheel;}- (void)setPrice:(double)price { _price = price;}- (double)price { return _price;}+ (void)test { NSLog(@"test 方法。。。。。。");}@end
QQCar.h
//// QQCar.h// oc-面向对象//// Created by stevenchang on 9/16/15.// Copyright (c) 2015 cz. All rights reserved.//#import "Car.h"//QQCar导入了继承了Car : 表示继承@interface QQCar : Car@end
QQCar.m
//// QQCar.m// oc-面向对象//// Created by stevenchang on 9/16/15.// Copyright (c) 2015 cz. All rights reserved.//#import "QQCar.h"@implementation QQCar@end
0 0
- OC面向对象
- OC之面向对象
- OC--面向对象初识
- oc面向对象概述
- OC面向对象思想
- OC之面向对象
- OC面向对象特性
- ④--OC面向对象
- OC面向对象
- OC面向对象
- OC面向对象总结
- OC面向对象
- OC面向对象
- oc面向对象
- [TwistedFate]OC面向对象
- oc的面向对象
- OC-1-面向对象
- OC-1-面向对象
- C语言中联合体union妙用
- Ubuntu vim上下左右变ABCD问题解决方法
- 在学习Hibernate中,有关事务的总结
- Ubuntu下切换java版本
- Java中的垃圾回收机制【转载】
- oc面向对象
- strptime的威力
- Opencv均值滤波-blur函数
- Opencv高斯滤波-GaussianBlur函数
- 多个按钮其中被按下按钮高亮显示
- Opencv中值滤波器-medianBlur函数
- How to Create Cross-Cell Bar in Excel
- Opencv双边滤波器-bilateralFilter函数
- Ember.js 入门指南——handlebars显示对象的键(未完待续)