main函数

//

//  main.m

//  2-3 LessionInstanceVariableAndMethod

//

//  Created by lanouhn on 15/2/3.

//  Copyright (c) 2015年 lanouhn. All rights reserved.

//

 

#import <Foundation/Foundation.h>

#import "Boy.h"

#import "MobilePhone.h"

#import "Man.h"

#import "Woman.h"

#import "Child.h"

#import "Falimy.h"

 

int main(int argc, const char * argv[]) {

    //面向对象编程的3大特性: 1. 封装 2. 继承 3. 多态

    //封装: 高内聚,低耦合

    //内聚: 模块内部成员的关联程度

    //耦合: 模块之间的关联程度

    

    //实例变量的可见度

    //修饰词的作用范围: 从这个修饰词开始往下的实例变量

    //1.public

    //公共的, 可以在类的内部哈外部访问

    //内部访问: 实例变量的名

    //外部访问: 对象 ->实例变量名

    //public违背了封装的思想, 一般不会使用

    

    

    Boy *mike = [[Boy alloc] init ];

    mike ->name = @"迈克"; //赋值

    NSLog(@"%@", mike ->name); //取值

//    mike ->color = @"黑";

//    NSLog(@"%@", mike ->color);

    

    //2. protected(默认值)

    //受保护, 不能从外部访问, 可以在类和子类的内部进行访问

    //内部访问: 实例变量名直接访问

    //外部访问: 设置器, 访问器

    [mike setAge:18]; //调用设置器

    NSLog(@"%ld", [mike age]); //调用访问器

    

    [mike setColor:@"黑"];

    NSLog(@"%@", [mike color]);

    

    //可以使用点语法来调用设置器和访问器

    //当点语法出现在赋值运算符(=)的左侧, 调用设置器

    //其他位置调用访问器

    mike.age = 18;

    NSLog(@"%ld", mike.age);

    

    //3. private

    //私有的, 只能在类的内部访问, 并且子类和外部都不能进行访问

    //内部访问: 实例变量名

    

    //方法

    //方法作用的范围

    //1. 公开的: 可以在外部进行访问

    //2. 私有的: 不可以在外部进行访问

    

    //在类的.h中声明的方法, 是公开的方法

    //在类的.h中没有声明的方法 或者 声明写在.m中的方法, 是私有方法

    

    //方法的定义

    

    // - : 实例方法, 由对象调用

    // + : 类方法, 由类名调用,

    //注; 类方法的内容, 不能够访问实例变量

    

    //类方法和实例方法的优缺点

    //1. 实例方法, 方法内部可以访问实例变量, 调用方法, 需要先创建对象, 再用对象调用方法

    //2. 类方法, 方法内部不能够访问实例变量, 直接用类名调用方法

    

    //1. 无参数

    //- 或 + (返回值类型)方法名;

    

    [mike sayHello];

    [Boy sayHello];

    

    //2. 一个参数

    //- 或 + (返回值类型)方法名:(参数类型)参数名;

    

    [mike sayHello:@"小美"];

    [Boy sayHello:@"大熊"];

    

    //3.多个参数

    //- 或 + (返回值类型)方法名1:(参数类型1)参数名1 方法名2:(参数类型2)参数名2 方法名3:(参数类型3)参数名3...;

    

    [mike sayHello:@"abc" withCount:2];

//    [mike sayHello:@"abc" :1];

//    [mike :@"abc" :1];

    

    //初始化方法

    //1. -方法

    //2. 返回值是id类型

    //3. 方法名以init开头

    Boy *xiaoMing = [[Boy alloc] init];

    xiaoMing.age = 20;

    xiaoMing.color = @"白色";

    

    //自定义初始化方法

    Boy *xiaoQiang = [[Boy alloc] initWithAge:20 color:@"黄色"];

    [xiaoQiang sayHello];

    

    MobilePhone * m1 = [[MobilePhone alloc] initWithType:@"Iphone" price:5198];

    NSLog(@"%@ %ld", m1.type, m1.price);

    

    //男人出生

    Man *man = [[Man alloc] init];

    //遇到了一个女孩, 一见钟情

    Woman *woman = [[Woman alloc] init];

    //他们结婚了

    man.woman = woman;

    //一年以后, 他们有了自己的孩子

    Child *child = [[Child alloc] init];

    woman.child = child;

    //从此一个幸福的家庭组建完成

    Falimy *falimy = [[Falimy alloc] init];

    falimy.woman = woman;

    falimy.man = man;

    falimy.child = child;

    

  return 0;

}

 

Boy类的声明

//

//  Boy.h

//  2-3 LessionInstanceVariableAndMethod

//

//  Created by lanouhn on 15/2/3.

//  Copyright (c) 2015年 lanouhn. All rights reserved.

//

 

#import <Foundation/Foundation.h>

 

@interface Boy : NSObject

{

    @public

    NSString *name;

    @protected

    NSInteger age;

    NSString *color;

    @private

    CGFloat height;

}

 

//自定义初始化方法

- (id) initWithAge:(NSInteger)aAge color:(NSString *)aColor;

 

//设置器

- (void)setAge:(NSInteger)aAge;

//访问器

- (NSInteger)age;

 

- (void)setColor:(NSString *)aColor;

-(NSString *)color;

 

//如何判断两个方法是否一致?

//1. +/-, 调用方式

//2. 方法名

-  (void)sayHello;

+ (void)sayHello;

 

//冒号(:)也是方法名的一部分

-  (void)sayHello:(NSString *)aName;

+ (void)sayHello:(NSString *)aName;

 

//方法名  sayHello:withCount:

- (void)sayHello:(NSString *)aName withCount:(NSInteger )aCount;

////方法名  sayHello::

//- (void)sayHello:(NSString *)aNamewithCount :(NSInteger *)aCount;

////方法名  ::

//- (void):(NSString *)aName :(NSInteger *)aCount;

+ (void)sayHello:(NSString *)aName withCount:(NSInteger )aCount;

 

@end

 

Boy类的实现

//

//  Boy.m

//  2-3 LessionInstanceVariableAndMethod

//

//  Created by lanouhn on 15/2/3.

//  Copyright (c) 2015年 lanouhn. All rights reserved.

//

 

#import "Boy.h"

 

@implementation Boy

 

//重写系统的初始化方法来为实现变量赋初值

//由于系统已经声明过方法, 重写初始化方法, 只需要写实现部分

- (id) init {

    name = @"小雪";

    color = @"紫色";

    age = 18;

    height = 100;

    return self;

}

 

- (id) initWithAge:(NSInteger)aAge color:(NSString *)aColor {

    age = aAge;

    color = aColor;

    return self;

}

 

//设置器

- (void)setAge:(NSInteger)aAge {

    age = aAge;

}

//访问器

- (NSInteger)age {

    return age;

}

 

- (void)setColor:(NSString *)aColor {

    color = aColor;

}

-(NSString *)color {

    return color;

}

 

- (void)sayHello {

    NSLog(@"name: %@, age:%ld", name, age);

}

 

+(void)sayHello {

    NSLog(@"Hello World!");

}

 

- (void)sayHello:(NSString *)aName {

    NSLog(@"Hello, %@", aName);

}

 

+ (void)sayHello:(NSString *)aName {

    NSLog(@"Hello, %@", aName);

}

 

- (void)sayHello:(NSString *)aName withCount:(NSInteger )aCount {

    for (int i = 0; i < aCount; i++) {

        NSLog(@"Hello, %@", aName);

    }

}

 

+ (void)sayHello:(NSString *)aName withCount:(NSInteger )aCount {

    for (int i = 0; i < aCount; i++) {

        NSLog(@"Hello, %@", aName);

    }

}

 

 @end

 

posted on 2015-02-04 09:26  小雪童鞋  阅读(255)  评论(0编辑  收藏  举报