Oc(实例变量可见度与方法)(InstanceVariableAndMethod)

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

时间: 2024-12-12 08:23:08

Oc(实例变量可见度与方法)(InstanceVariableAndMethod)的相关文章

第二讲、实例变量可见度、方法

一.实例变量可见度 可见度         特点 public          实例变量可以在类的外部和内部操作 protected    实例变量只能在该类和其子类内操作     默认 private        实例变量只能在该类内访问 内部:相应类的@implementation和@end之间 @interface Person : NSObject { @public NSString*_name; @protected NSString*_gender; int_age; //年龄

Obj-c2[实例变量可见度和方法]

////setter方法  设置器,专门给一个实例变量赋值的方法//- (void)setName:(NSString *)name;//- (void)setAge:(NSInteger)age;//- (void)setSex:(NSString *)sex;//- (void)setWeight:(CGFloat)weight;//- (void)setHeight:(CGFloat)height;//////getter方法 访问器,用来得到一个实例变量内容的方法//- (NSStrin

OC总结第二讲:实例变量可见度和方法

实例变量有3种常用的可见度:@public  @protected  @private public(公有的) 实例变量可以在类的外部和内部操作 protected(受保护的,默认的) 实例变量只能在该类和其子类内操作 private(私有的) 实例对象只能在该类内访问 所谓的内部,指的是相应类的@implementation和@end之间 方法: 1.类方法:只能类使用 例如: +(id)alloc 注意:类方法中不能使用实例变量 2.实例方法: 只能对象使用, - (void)satHi 程

实例变量可见度、方法、setter、getter

oc中的消息机制:如果为类方法,消息接收者为类名 如果为实例方法,消息接收者为对象名 消息带参数给参数,不带就不给 消息有返回值,定义相同类型的变量接收,没有就不需要定义变量 //各实例变量的课件度 NSInteger _height; @public NSString *_name;//为什么不默认用@public 修饰实例变量,破坏了封装性,不安全: @protected NSString *_gender; @private NSInteger _age; //其所占字节数根据操作系统位数

OC中实例变量可见度、setter、getter方法和自定义初始化方法

在对类和对象有一定了解之后,我们进一步探讨实例变量的可见度等相关知识 实例变量的可见度分为三种情况:public(共有),protected(受保护的,默认),private(私有的),具体的不同和特点如下: 具体的使用示例如下: 编程时默认的可见度是@protectde,为什么不使用@public呢? 因为OC是面向对象编程,使用@public关键字,暴漏了类内部的细节,从而不符合面向对象语言的三大特性之一——封装 实例变量经过@protectde修饰之后,我们就不能在该类和其子类外操作,例如

OC实例变量初始化方法

OC实例变量初始化方法1. 使用实例setter方法 默认初始化方法 + setName:xxx setAge:xxx2. 使用实例功能类方法,默认初始化方法 + setName:xxx age:xxx3.使用实例初始化方法 initWith开头的方法4.使用构造器 类名+With…以Person  Student两个类为例1. 使用实例 setter方法这是最麻烦的方法 @interface Person : NSObject { NSString *_name; NSString *_sex

第二讲实例变量可见度,set/get方法,自定义初始化(代码) 及description的使用

一.实例变量可见度,setter和getter方法,自定义初始化的综合使用实例 Person.h文件 1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObject 4 { 5 @private 6 NSString *_name; 7 int _age; 8 @protected 9 NSString *_sex; 10 NSString *_hobby; 11 @public 12 NSString *_addres

OC 实例变量(Instance Var)和成员变量(member var)区别

摘要:  Objective-C  引入了“实例变量"的概念,但同时, 也经常出现 “成员变量”的声音. 到底什么是实例变量,什么是成员变量,二者的区别是什么呢? 今天查看apple 的官方文档时(如下).https://developer.apple.com/library/mac/referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/index.html 发现了一个新的名词: 成员变量(member variable).

实例变量可见度修饰符

1.public;2.protected;3.private;4.package //1.public (公共的), 作用域是不受限制的被public修饰的实例变量,不仅可以在所属的类和子类中直接访问,而且还可以被其他类定义的方法直接访问 //2.protected (受保护的),如果实例变量不写修饰符.默认为protected,作用域:所属类和子类定义的方法中可以访问 //3.private(私有的),作用域:所属的类的方法调用,不能被子类定义的方法调用 //4.package(包,框架),了