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