黑马程序员--oc:面向对象语法

来源:互联网 发布:美国失业率数据 编辑:程序博客网 时间:2024/05/01 01:02

一、封装

1.set与get方法

1.1 set方法

 1.1.1作用: 提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤

 1.1.2命名规范:

 1> 方法名必须以set开头

 2> set后面跟上成员变量的名称,成员变量的首字母必须大写

 3> 返回值一定是void

 4> 一定要接收一个参数,而且参数类型跟成员变量类型一致

 5> 形参的名称不能跟成员变量名一样

 

1.2 get方法

 1.2.1作用:返回对象内部的成员变量

 1.2.2命名规范:

 1> 肯定有返回值,返回值类型肯定与成员变量类型一致

 2> 方法名跟成员变量名一样

 3> 不需要接收任何参数

 

 

#import <Foundation/Foundation.h>

 

typedef enum {

    SexMan,

    SexWoman

} Sex;

 

 

@interface Student : NSObject

{/*成员变量的命名规范:一定要以下划线 _ 开头

  作用:

  1.让成员变量和get方法的名称区分开

  2.可以跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量

  */

    int _no;

    Sex _sex;

}

 

// sex的set和get方法

- (void)setSex:(Sex)sex;

- (Sex)sex;

 

// no的set和get方法

- (void)setNo:(int)no;

- (int)no;

 

@end

 

@implementation Student

 

- (void)setSex:(Sex)sex

{

    _sex = sex;

}

 

- (Sex)sex

{

    return _sex;

}

 

- (void)setNo:(int)no

{

    _no = no;

}

- (int)no

{

    return _no;

}

 

@end

 

2.类方法
@interface Person : NSObject

{

    int age;

}

 

// 类方法都是以+开头

+ (void)test;

 

@end

 

@implementation Person

+ (void)test

{

    // 会引发死循环

    //[Person test];

    

    NSLog(@"333");

    

    // 会引发死循环

//    /[Person test];

}

@end

 

3.self的应用

#import <Foundation/Foundation.h>

 

@interface Person : NSObject

{

    int _age;

}

 

- (void)setAge:(int)age;

- (int)age;

 

- (void)test;

@end

 

@implementation Person

- (void)setAge:(int)age

{

    // _age = age;

    self->_age = age;

}

- (int)age

{

    return self->_age;

}

 

- (void)test

{

    // self:指向了方向调用者,代表着当期对象

    int _age = 20;

NSLog(@"Person的年龄是%d岁", self->_age);

 

//注意死循环

//[self test];

}

@end

 

int main()

{

    Person *p = [Person new];

    

    [p setAge:10];

    

    [p test];

    

    return 0;

}

 

二、继承

 1.继承的好处:

 1> 抽取重复代码

 2> 建立了类之间的关系

 3> 子类可以拥有父类中的所有成员变量和方法

 

 2.注意点

 1> 基本上所有类的根类是NSObject

 

#import <Foundation/Foundation.h>

 

/********Animal的声明*******/

@interface Animal : NSObject

{

    int _age;

    double _weight;

}

 

- (void)setAge:(int)age;

- (int)age;

 

- (void)setWeight:(double)weight;

- (double)weight;

@end

 

/********Animal的实现*******/

@implementation Animal

- (void)setAge:(int)age

{

    _age = age;

}

- (int)age

{

    return _age;

}

 

- (void)setWeight:(double)weight

{

    _weight = weight;

}

- (double)weight

{

    return _weight;

}

@end

 

/********Dog*******/

// : Animal 继承了Animal,相当于拥有了Animal里面的所有成员变量和方法

// Animal称为Dog的父类

// Dog称为Animal的子类

@interface Dog : Animal

@end

 

@implementation Dog

@end

 

/********Cat*******/

@interface Cat : Animal

@end

 

@implementation Cat

@end

 

int main()

{

    Dog *d = [Dog new];

    

    [d setAge:10];

    

    NSLog(@"age=%d", [d age]);

    return 0;

}

 

3.super的应用

super的作用

 1.直接调用父类中的某个方法

 2.super处在对象方法中,那么就会调用父类的对象方法

   super处在类方法中,那么就会调用父类的类方法

 

 3.使用场合:子类重写父类的方法时想保留父类的一些行为

 

 

#import <Foundation/Foundation.h>

// 僵尸

@interface Zoombie : NSObject

- (void)walk;

 

+ (void)test;

- (void)test;

 

@end

 

@implementation Zoombie

- (void)walk

{

    NSLog(@"往前挪两步******");

}

 

+ (void)test

{

    NSLog(@"Zoombie+test");

}

 

- (void)test

{

    NSLog(@"Zoombie-test");

}

@end

 

// 跳跃僵尸

@interface JumpZoombie : Zoombie

+ (void)haha;

- (void)haha2;

@end

 

 

@implementation JumpZoombie

 

+ (void)haha

{

    [super test];

}

 

- (void)haha2

{

    [super test];

}

 

- (void)walk

{

    // 跳两下

    NSLog(@"跳两下");

    

    // 走两下(直接调用父类的walk方法)

    [super walk];

    //NSLog(@"往前挪两步----");

}

@end

 

int main()

{

    //[JumpZoombie haha];

    JumpZoombie *jz = [JumpZoombie new]; 

    [jz haha2];

    

    return 0;

}


三、多态

多态

 1.没有继承就没有多态

 2.代码的体现:父类类型的指针指向子类对象

 3.好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象

 4.局限性:

 1> 父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法

 

// 动物

@interface Animal : NSObject

- (void)eat;

@end

 

@implementation Animal

- (void)eat

{

    NSLog(@"Animal-吃东西----");

}

@end

 

// 狗

@interface Dog : Animal

- (void)run;

@end

 

@implementation  Dog

- (void)run

{

    NSLog(@"Dog---跑起来");

}

- (void)eat

{

    NSLog(@"Dog-吃东西----");

}

@end

 

// 猫

@interface Cat : Animal

 

@end

 

@implementation Cat

- (void)eat

{

    NSLog(@"Cat-吃东西----");

}

@end

void feed(Animal *a)

{

    [a eat];

}

int main()

{

Animal *aa = [Dog new];

 Dog *dd = (Dog *)aa;

feed(aa);    

    [dd run];

return 0;

}

 

 

0 0
原创粉丝点击