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
原创粉丝点击