黑马程序员 -- OC语言 封装 继承 多态

第二讲 封装 继承 多态

A.封装(成员变量/方法的封装)

1.封装是建立在类的基础之上。

a.封装的好处:

@interface Student :NSObject

{

@public

Int age;

}

//提供一个方法给外界设置age的属性值

//我们称作set方法。有命名规范

/*

Set方法

1.作用;提供一个方法给外界设置成员变量值

2.命名规范:

a.方法名必须以set开头

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

c.返回值一定是void

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

e.形参的名称不能跟成员变量名一样

*/

-(void)setAge:(int)newAge;

-(void)study;

@end

//实现中

@implemention Student

-(void)setAge:(int)newAge

{

//对传进来的数据进行过滤

Age = newAge;

}

-(void)study

{

NSLog(@”学习”);

}

@end

Int main()

{

Student *stu = [Student new];

Stu->age = 20;

 

[stu setAge:10];//对成员变量进行赋值

 

Return 0;

}

/*

get方法

1.作用; 返回对象内部的成员变量

2.命名规范:

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

b. 方法名跟成员变量一样

c.不需要接收任何参数

d.

e

*/

@implemention Student

-(void)age

{

Return age;

}

-(void)setAge:(int)newAge

{

//对传进来的数据进行过滤

Age = newAge;

}

-(void)study

{

NSLog(@”学习”);

}

@end


2.封装的命名规范

a.成员变量的封装:set和get方法,例如成员变量有_age

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

 

//set方法

-(void)setAge:(int)age

{

_age = age;

}

//get方法

-(int)age

{

Return _age;

}


3.OC的弱语法

a.在主函数中调用了方法,但是在实现和声明中没有对应文件,编译器编译的时候会出现警告而不会出现错误。然而在执行的时候会出现错误,编译器报错,并且是经典错误。给类发送了一个不能识别的消息。

b.OC是在运行的时候才会检测对象有没有实现


4.类方法使用

a.类方法都是以+(加号)开头

//在声明中

+(void)printClassName;

//在实现中

+(void)printClassName

{

NSlog(@”类方法”);

}

b.类方法和对象方法的区别

//类方法只能用类来调用、以+号开头、类方法不依赖于对象,不能在内部去访问成员变量。

//对象方法只能用对象来调用、以-号开头

//可以允许类方法和对象方法同名

//类方法的好处和使用场合

1.不依赖于对象,执行效率高。

2.能用类方法尽量用类方法

3.场合:当方法内部不需要访问到成员变量,就可以改变为类方法。

c.类方法练习

//工具类:基本没有任何成员变量,里面的方法基本都是类方法。


5.self关键字用法

//在类的对象方法中,同样也遵循作用域规则,这时输出显示的_age将不是成员变量的值,而是int _age = 20的值。


//可以使用self->_age来指向成员变量。


//self调用当前(self所在方法中的方法)方法,会进入死循环。

//self在什么中,就调用什么。比如在对象方法中,就会调用相关的对象方法。如果self在类方法中就会调用与类方法有关的方法。

 

 

 

B.继承使用

1.类A、类B;如果类A继承了类B,则类B为父类,类A为子类。并且类A继承了类B中的成员变量和方法。

//狗、猫、鱼,,等都是动物,他们有共同的属性和行为。我们在写的时候就可以用继承的方式来实现。

//继承实现规范

@interface 类名1 :类名2  //类名1继承了类名2 

@end

//首先定义父类

@interface Animal :NSObject

@end

//Dog继承了Animal。Animal为Dog的父类。

@interface Dog :Animal

@end     

      

2.继承的好处

a.抽取重复代码

b.建立了类之间的关系

c.子类可以拥有父类中的所有成员变量和方法。

d.基本上所有类继承于NSObject类。


3.使用继承需要注意的地方

a.不允许子类和父类拥有相同的名称的成员变量。并且父类要放到使用的最前面(父类必须放在子类的前面)

b.在继承关系中,在子类中调用方法时,会首先在子类中寻找对应的方法,如果有则执行当前方法,如果没有会进入父类中寻找调用的方法。

C.重写:子类覆盖父类中的方法(子类方法名和父类中的方法名相同)

4.继承和组合

a.继承:

1.当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中来。

2.当A类拥有B类中的部分方法和属性时,可以考虑让B类来继承A类。

b.组合:

1.组合:xxx 拥有 xxx;继承:xx 是 xxx


//self指向当前类方法的调用。super指向父类方法的调用。


C.多态使用

1.多态:多种形态,是建立在继承的基础之上的。没有继承就没有多态。

//父类

@interface Animal :NSObject

-(void)eat;

@end

@implemention Animal

-(void)eat

{

NSLog(@”动物吃”)

}

@end

//子类

@interface Dog:Animal

-(void)eat;

@end

@implemention Dog

-(void)eat

{

NSLog(@”狗吃”)

}

@end

//主函数

Int main()

{

//多种形态:父类指针指向子类对象

Dog *d = [Dog new];

Animal *a = [Dog new];

[a eat];

Return 0;

}

//运行结果是狗吃东西。处多态状态,调用方法时会检测对象的真实形象


2.多态的好处和使用局限

a.如果参数中使用的是父类类型,可以传入父类、子类对象


b.父类类型的变量,不能用来调用子类的方法。

c.如果要实现b中的情况,请用强制转换。


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值