黑马程序员_OC语言之面向对象的三大特性(封装、继承、多态)
2014-04-28 16:25
911 查看
面向对象的三大特:封装、继承、多态
------ IOS培训、android培训、期待与您交流!-------
一、封装(用set方法对成员变量进行封装)
#import<Foundation/Foundation.h>
@interface Student:NSObject
{
//@public 成员变量尽量不要用@public
int age;
}
- (void)setAge:(int)newAge;
- (int)age;
- (void)study;
@end
@implement Student
- (void)setAge:(int)newAge
{
//对传进来的参数进行过滤
if(newAge <= 0)
{
newAge = 1;
}
age=newAge;
}
- (int)age
{
return age;
}
- (void)study
{
NSLog(@"%d岁的学生在学习",age);
}
@end
int main()
{
Student *stu = [Student new];
[stu newAge:-10];
//stu->age = 20;这个时候已经不能直接给age赋值
//NSLog(@"学生的年龄是%d岁,",stu->age);//因为age不是public,所以不能这样用,这个时候需要提供一个方法获取成员变量;
NSLog(@"学生的年龄是%d岁,",[stu age]);
[stu study];
}
小结:1、对对象的成员变量的赋值进行限定
2、set方法:作用:提供一个方法给外界设置成员变量值,可以在方法里对参数进行过滤
命名规范:1>、方法名必须以set开头;
2>、set后面跟上成员变量的名称,成员变量的首字母必须大写;
3>、返回值一定是void;
4>、一定要接收一个参数,而且参数类型跟成员变量的类型一致;
5>、形参的名称不能跟成员变量名一样;
3、用set方法对成员变量封装;
4、get方法:作用:返回对象内部的成员变量
命名规则:1>、肯定有返回值,返回值类型肯定与成员变量类型一致
2>、方法名与成员变量名一样
3>、不需要接受任何参数
5、成员变量只允许外界访问,不允许外界修改用get方法
成员变量的命名规则:
(1)、一定要以下划线_开头:作用:1>、让成员变量和get方法的,名称区别开
2>、可以跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量
二、继承
类A
类B 继承 类A
#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
@implementation Animal
- (void)setAge:(int)age
{
_age=age;
}
- (int)age
{
return _age;
}
- (void)setWeight:(double)weight
{
_weight=weight;
}
- (double)weight
{
return _weight;
}
@end
//狗的声明和实现,继承了animal,相当于拥有了animal里面的所有成员变量和方法
//animal称为Dog的父类
@interface Dog : Animal
@end
@implementation Dog
@end
//猫的声明和实现,继承了animal
@interface Cat : Animal
@end
@implementation Cat
@end
int main()
{
Dog *d = [Dog new];
[d setAge:10];
NSLog(@"age = %d",[d age]);
Cat *c = [Cat new];
[c setWeight:7.0];
NSLog(@"weight = %d",[c weight]);
}
1、继承的好处:
1>、抽取重复代码
2>、建立了类之间的关系
子类可以拥有父类中的所有成员变量和方法。
注意点:基本上所有类的根类都是NSObject
坏处:耦合
b111
性太强
2、继承的使用注意:
1>、父类必须声明在子类的前面,与实现无关
2>、不允许子类和父类拥有相同名称的成员变量
3>、可以允许子类和父类拥有相同名称的方法,如果子类和父类中都有相同名称的方法,当子类对象调用方法时,先查看子类中的方法,就近原则,
4>、当子类中拥有父类中相同名称的方法,又称为该方法的重写;即子类重新实现父类中的方法,覆盖父类以前的做法
5>、调用某个对象的方法时,优先去当前对象中找;如果找不到,就去父类中找
3、继承的使用场合:
1>、当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
2>、当A类拥有B类中的部分属性和方法时,让B类继承A类
4、super关键字
1>、[super 方法名] 调用父类中的某个方法
2>、super处在对象方法中,那么就会调用父类的对象方法
3>、super处在类方法中,那么就会调用父类的类方法
4>、super的使用场合:子类重写父类的方法想保留父类的一些行为
三、多态(多种形态)没有继承就没有多态
#import<Foundation/Foundation.h>
@interface Animal : NSObject
- (void)eat;
@end
@implementation Animal
- (void)eat
{
NSLog(@"Animal吃东西————");
}
@end
@interface Dog : Animal
@end
@implementation Dog
- (void)eat
{
NSLog(@"Dog吃东西————");
}
@end
int main()
{ //多种类型
Dog *d = [Dog new];// Dog类型
//多态:父类指针指向子类对象
Animal *a = [Dog new]; //Aniaml类型
//调用方法时会检测对象的真实对象
[a eat];//调用Dog类中的eat,因为a指针指向的Dog的类型
return 0;
}
1、多态的好处
1>、节省代码
2>、如果函数\方法参数中使用的是父类类型,就可以传入父类、子类对象
2、多态的局限性:
1>、父类类型的变量不能直接调用来调用子类的方法,必须强制转换为子类类型变量后,才能直接调用子类特有的方法
2>、代码的体现:父类类型的指针指向子类对象
------ IOS培训、android培训、期待与您交流!-------
------ IOS培训、android培训、期待与您交流!-------
一、封装(用set方法对成员变量进行封装)
#import<Foundation/Foundation.h>
@interface Student:NSObject
{
//@public 成员变量尽量不要用@public
int age;
}
- (void)setAge:(int)newAge;
- (int)age;
- (void)study;
@end
@implement Student
- (void)setAge:(int)newAge
{
//对传进来的参数进行过滤
if(newAge <= 0)
{
newAge = 1;
}
age=newAge;
}
- (int)age
{
return age;
}
- (void)study
{
NSLog(@"%d岁的学生在学习",age);
}
@end
int main()
{
Student *stu = [Student new];
[stu newAge:-10];
//stu->age = 20;这个时候已经不能直接给age赋值
//NSLog(@"学生的年龄是%d岁,",stu->age);//因为age不是public,所以不能这样用,这个时候需要提供一个方法获取成员变量;
NSLog(@"学生的年龄是%d岁,",[stu age]);
[stu study];
}
小结:1、对对象的成员变量的赋值进行限定
2、set方法:作用:提供一个方法给外界设置成员变量值,可以在方法里对参数进行过滤
命名规范:1>、方法名必须以set开头;
2>、set后面跟上成员变量的名称,成员变量的首字母必须大写;
3>、返回值一定是void;
4>、一定要接收一个参数,而且参数类型跟成员变量的类型一致;
5>、形参的名称不能跟成员变量名一样;
3、用set方法对成员变量封装;
4、get方法:作用:返回对象内部的成员变量
命名规则:1>、肯定有返回值,返回值类型肯定与成员变量类型一致
2>、方法名与成员变量名一样
3>、不需要接受任何参数
5、成员变量只允许外界访问,不允许外界修改用get方法
成员变量的命名规则:
(1)、一定要以下划线_开头:作用:1>、让成员变量和get方法的,名称区别开
2>、可以跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量
二、继承
类A
类B 继承 类A
#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
@implementation Animal
- (void)setAge:(int)age
{
_age=age;
}
- (int)age
{
return _age;
}
- (void)setWeight:(double)weight
{
_weight=weight;
}
- (double)weight
{
return _weight;
}
@end
//狗的声明和实现,继承了animal,相当于拥有了animal里面的所有成员变量和方法
//animal称为Dog的父类
@interface Dog : Animal
@end
@implementation Dog
@end
//猫的声明和实现,继承了animal
@interface Cat : Animal
@end
@implementation Cat
@end
int main()
{
Dog *d = [Dog new];
[d setAge:10];
NSLog(@"age = %d",[d age]);
Cat *c = [Cat new];
[c setWeight:7.0];
NSLog(@"weight = %d",[c weight]);
}
1、继承的好处:
1>、抽取重复代码
2>、建立了类之间的关系
子类可以拥有父类中的所有成员变量和方法。
注意点:基本上所有类的根类都是NSObject
坏处:耦合
b111
性太强
2、继承的使用注意:
1>、父类必须声明在子类的前面,与实现无关
2>、不允许子类和父类拥有相同名称的成员变量
3>、可以允许子类和父类拥有相同名称的方法,如果子类和父类中都有相同名称的方法,当子类对象调用方法时,先查看子类中的方法,就近原则,
4>、当子类中拥有父类中相同名称的方法,又称为该方法的重写;即子类重新实现父类中的方法,覆盖父类以前的做法
5>、调用某个对象的方法时,优先去当前对象中找;如果找不到,就去父类中找
3、继承的使用场合:
1>、当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
2>、当A类拥有B类中的部分属性和方法时,让B类继承A类
4、super关键字
1>、[super 方法名] 调用父类中的某个方法
2>、super处在对象方法中,那么就会调用父类的对象方法
3>、super处在类方法中,那么就会调用父类的类方法
4>、super的使用场合:子类重写父类的方法想保留父类的一些行为
三、多态(多种形态)没有继承就没有多态
#import<Foundation/Foundation.h>
@interface Animal : NSObject
- (void)eat;
@end
@implementation Animal
- (void)eat
{
NSLog(@"Animal吃东西————");
}
@end
@interface Dog : Animal
@end
@implementation Dog
- (void)eat
{
NSLog(@"Dog吃东西————");
}
@end
int main()
{ //多种类型
Dog *d = [Dog new];// Dog类型
//多态:父类指针指向子类对象
Animal *a = [Dog new]; //Aniaml类型
//调用方法时会检测对象的真实对象
[a eat];//调用Dog类中的eat,因为a指针指向的Dog的类型
return 0;
}
1、多态的好处
1>、节省代码
2>、如果函数\方法参数中使用的是父类类型,就可以传入父类、子类对象
2、多态的局限性:
1>、父类类型的变量不能直接调用来调用子类的方法,必须强制转换为子类类型变量后,才能直接调用子类特有的方法
2>、代码的体现:父类类型的指针指向子类对象
------ IOS培训、android培训、期待与您交流!-------
相关文章推荐
- 黑马程序员——OC语言学习——OC面向对象的三大特性:封装、继承、多态,OC字符串——NSString
- 黑马程序员——OC语言基础:面向对象三大特性,封装、继承、多态
- 黑马程序员——OC面向对象三大特性——封装,继承,多态。
- 黑马程序员-OC之面向对象的三大特性:封装、继承和多态
- 黑马程序员---OC面向对象三大特性(封装、继承、多态)
- 黑马程序员——OC面向对象三大特性——封装,继承,多态。
- 黑马程序员_iOS开发之OC之面向对象之三大特性封装、继承和多态
- java语言基础(23)——面向对象三大特性(封装、继承、多态)
- 黑马程序员——OC笔记之面向对象三大特征(封装、继承、多态)
- OC面向对象的三大特性:封装,继承,多态
- 黑马程序员-OC的三大特性:封装、继承、多态
- 黑马程序员——OC语言基础——面向对象三大特性之多态
- OC温故:面向对象的三大特性(封装,继承,多态)
- 黑马程序员————OC面向对象_三大特性之继承与多态
- 黑马程序员——OC语言基础——面向对象三大特性之封装
- 黑马程序员-④面向对象三大特性封装、继承、多态
- 黑马程序员--OC的三大特性 封装 继承 多态
- 黑马程序员——OC篇(二)面向对象的三大特性(封装、继承、多态)
- 黑马程序员--OC面向对象的三大特征——封装、继承、多态
- 黑马程序员——OC语言基础——面向对象三大特性之继承