《黑马程序员》 OC的三大特性

OC 的三大特性:封装、继承、多态。

封装:过滤不合理的值

#import <Foundation/Foundation.h>
// set 方法
// 作用:提供一个方法给外界设置成员变量,可以在方法对成员变量进行赋值和过滤

// get 方法
// 作用:返回对象内部的成员变量,得到成员变量的值。
@interface Student : NSObject
{
    // 成员变量名的命名规范
    // 成员变量名肯定以下划线开头
    // 好处:可以区分参数名称和成员变量的名称,也可以区分变量名和成员变量的名称。
    // @public 在这里不允许写@public,成员变量不允许外部随意修改
    int _age;
}

// set方法的命名规范
// 一定是对象方法,必须以减号-开头
// 返回值类型一定是void
// 必须以set开头,且set后面跟上的成员变量名,变量名的第一个字母必须大写。
// 肯定会有参数,参数类型肯定和成员变量类型一样,形参的名称不能和成员变量名一样。
- (void)setAge:(int)age;

// get方法的命名规范
// 返回值类型肯定和成员变量名一致。
// 方法名和成员变量名一样,
// 不需要接收任何参数。
- (int)age;
@end

@implementation Student

// set方法可以对成员变量进行赋值。
- (void)setAge:(int)age
{
    _age = age;
}
// get方法可以得到成员变量的值
- (int)age;
{
    return _age;
}
@end
int main(int argc, const char * argv[])
{
    Student *stu = [Student new];

    [stu setAge:10];

    int a = [stu age];
    NSLog(@"%d",a);

    return 0;
}

set方法

① 作用:提供一个方法给外界设置成员变量,可以在方法对成员变量进行赋值和过滤。

② set方法的命名规范
           一定是对象方法,必须以减号-开头

返回值类型一定是void

必须以set开头,且set后面跟上的成员变量名,变量名的第一个字母必须大写。

肯定会有参数,参数类型肯定和成员变量类型一样,形参的名称不能和成员变量名一样。

例:- (void)setAge:(int)age;

③ 成员变量的命名规则

成员变量名肯定以下划线开头

好处:可以区分参数名称和成员变量的名称,也可以区分变量名和成员变量的名称。

@public 在这里不允许写@public,成员变量不允许外部随意修改

例: int _age;

继承

概念:当两个类中间有相同的属性和行为是就抽取一个类作为父类,让另一个类继承父类:

#import <Foundation/Foundation.h>

// 继承:当两个类中拥有相同的属性和行为时就抽取一个类作为父类,让另一个继承这类父类

@interface Person : NSObject
{
    // 两个成员变量
    int _age;
    double _weight;
}
// age的set和get方法
- (void)setAge:(int)age;
- (int)age;

// weight的set和get方法
- (void)setWeight:(double)weight;
- (double)weight;
@end

@implementation Person

// age的set和get方法的实现
- (void)setAge:(int)age
{
    _age = age;
}
- (int)age
{
    return _age;
}

// weight的set和get方法的实现
- (void)setWeight:(double)weight
{
    _weight = weight;
}
- (double)weight
{
    return _weight;
}
@end

@interface Student : Person

@end

@implementation Student

@end

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

    // 当子类继承父类时,就会拥有父类的所有属性和方法
    Student *stu = [Student new];
    [stu setAge:10];
    int s = [stu age];
    NSLog(@"学生的年龄为%d",s);
    return 0;
}

注:当子类继承父类就会拥有父类所有的属性和方法。

重写

重写定义: 在子类里面重新定义和实现类相同的方法和实现

在对象调用方法过程中首先会在自己的类中找有没有这个方法如果没有这个方法就会去父类里面找

@interface Person : NSObject
{
    // 两个成员变量
    int _age;
    double _weight;
}
// age的set和get方法
- (void)setAge:(int)age;
- (int)age;

// weight的set和get方法
- (void)setWeight:(double)weight;
- (double)weight;
@end

@implementation Person

// age的set和get方法的实现
- (void)setAge:(int)age
{
    _age = age;
}
- (int)age
{
    return _age;
}

// weight的set和get方法的实现
- (void)setWeight:(double)weight
{
    _weight = weight;
}
- (double)weight
{
    return _weight;
}
@end

@interface Student : Person
// 重写: 在子类里面重新定义和实现类相同的方法和实现
// age的set和get方法
- (void)setAge:(int)age;
- (int)age;

// weight的set和get方法
- (void)setWeight:(double)weight;
- (double)weight;

@end

@implementation Student
// age的set和get方法的实现
- (void)setAge:(int)age
{
    _age = age;
}
- (int)age
{
    return _age;
}

// weight的set和get方法的实现
- (void)setWeight:(double)weight
{
    _weight = weight;
}
- (double)weight
{
    return _weight;
}

@end

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

    // 当子类继承父类时,就会拥有父类的所有属性和方法
    Student *stu = [Student new];
    [stu setAge:10];
    int s = [stu age];
    NSLog(@"学生的年龄为%d",s);
    return 0;
}

注意点:
     1 父类必须声明在子类前面
     2 子类不能定义与父类相同的成员变量
     3 在对象调用方法时,会首先在自己的类中找,如果没有找到就去父类里面找
    坏处 :藕合性太强,父类必须存在,不存在就不可以使用。

使用场合:

① 当两个类 拥有相同属性和方法时使用,就可以将相同的东西抽取到一个父类中

② 当A类完全拥有B类中的部分属性和方法时就可以考率让B继承A。

继承  :  XX  是  XX

组合  :  XX  拥有 XX

当不能满足继承的条件时就使用组合。

时间: 2024-11-08 09:45:15

《黑马程序员》 OC的三大特性的相关文章

黑马程序员——面向对象编程三大特性

黑马程序员——面向对象编程三大特性 ------- android培训.IOS培训.期待与您交流! ---------- 面向对象编程三大特性:封装,继承,多态,(抽象) ***封装的概念与原理*** 封装是面向对象的特性之一 封装的好处:降低数据被无用的可能性,保证数据安全性 不封装的缺点:会把自己的属性暴露给外部,失去对该属性的管理权 封装原理:实例变量默认只能被当前类的对象方法访问 **封装实现** 定义设置实例变量(setter)方法和访问实例变量(getter)方法 1)setter(

[黑马程序员]Objective-C 面向对象三大特性之继承

基本概念 程序的世界和人类的“对象”世界在思想上是没有设么区别的,富二代继承了父母,自然就拥有了父母拥有的所有资源,子类继承了父类同样就拥有了父类所有的方法和属性(成员变量). 比如我们前文(Objective-C 面向对象三大特性之多态)中提到的Animal和Dog类: #import <Foundation/Foundation.h> @interface Animal : NSObject -(void) eat; @end @implementation Animal -(void)

黑马程序员--面向对象的三大特性-我之见解

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- ------封装------- 1.什么是封装: 封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式 2.封装的好处: 将变化隔离.(不管里面怎么变,使用者不需要知道) 便于使用.(使用者只需按照一定的方法使用就可以了) 提高重用性

[黑马程序员]Objective-C 面向对象三大特性之多态

什么是多态? 多态(Polymorphism)按字面的意思就是“多种状态”.在面向对象语言中,接口的多种不同的实现方式即为多态.引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作.简单地说就是:允许将子类类型的指针赋值给父类类型的指针. 简单示例 #import <Foundation/Foundation.h> @interface Animal : NSO

黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSNumber 前几篇笔记中,小桥复习了Foundatio框架中的几个类,这三个是OC学习的尾声了. 小桥已经复习过OC数组类NSArray,也说过它只能存放OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的NSNumber就有用了,它能够把基本数据类型包装成OC对象.

黑马程序员-OC学习笔记之ARC

---------------------- IOS开发.Android培训.期待与您交流! ----------------------一.什么是ARC        ARC是自动引用计数,苹果官方在Xcode4.2及以后版本中加入的一个内存管理机制,完全取代了程序员人工的内存管理,使得程序员只须关心程序本身.使用ARC,编译器会自动在代码中加入内存管理代码,是一个编译器特性,而不是运行时特性,当然,它也和JAVA的垃圾回收不同,它的本质和手动的内存管理是一样的,只是这些代码编译器会自动添加.

黑马程序员-OC学习笔记之Foundatio框架集合类

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.OC数组 OC数组是一个类,它也分不可变数组NSArray和可变数组NSMutableArray. 1?不可变数组的创建 // 创建一个不可变数组,元素为一个OC字符串对象 @"小桥" NSArray *array1 = [NSArray arrayWithObject:@"小桥"]; // 创建一个不可变数组,元素为多个O

黑马程序员——oc语言学习心得—— 属性声明和赋值

黑马程序员——oc语言学习心得—— 属性声明和赋值 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,在oc中所有类继承与终极父类Object2,声明字符变量采用N是string  *_xxx 实例变量一般以下划线开头3,在oc中方法以+ -号区分 -号开头是实例方法或对象方法  +号开头是类方法  前置用对象调用 后者用类名调用4,在xcode4以后声明@property 不用在写@snysize  自动生成get.set方法5,属性

黑马程序员-OC内存管理 @property的增强

涉及到内存管理,只读,多线程等很多功能时,setter和getter方法也就没那么简单了:当然@property依然强大,很好用: 1:内存管理相关参数: *:retain:  (如果是oc对象类型),生成的setter会自动release旧值,retain新值: *:assign:(适用于非oc对象)  这个是默认的值 *:copy:release旧值,copy新值: @property (retain) NSString *name; // 同类型的参数不能同时写 // @property

黑马程序员-OC self super isa指针

self指针: self是oc面向对象设计中的一个特殊指针,相当于java中的this,但是比this强大,this只能访问实例对象的相关方法和成员变量,或者说this只代表实例对象: self不仅可以代表实例对象,还可以代表类对象:谁调用当前方法,self就代表谁:如果self用在了以"-"号的方法中,也就是对象方法中,那么就代表实例对象,若果在"+"号开头的方法中,self就代表类对象,因为只有类对象才能调用以"+"号开头的方法: self调