黑马程序员------OC面向对象之继承

------Android培训、iOS培训、Java培训,期待与您交流-----

一、继承的基本概念

继承是面向的三大特征之一,指的是在一个类的基础上,定义一个新类;原本的类成为父类(基类),新类称为子类(派生类)。

生活中,继承的例子也是数不胜数,比如一个儿子继承了他父亲,那么他就享受他父亲的财产了,当然不是全部,详细解释见下文。

再如,一个电器系列:

一层接着一层,电器为父类,下面的洗衣机、电脑、电视机都是电器的子类,下面的品牌名又是洗衣机、电脑、电视机的子类,当然也是电器的子类。

体现在代码中,继承的好处:

1)抽取了重复的代码

2)使类与类之间有关系可循

二、OC中的继承

1)特点

第一、子类拥有父类的属性和方法;

第二、子类可以有自己新的属性和方法;

第三、子类可以重写父类的方法;

第四、可以声明父类,创建子类。

2)好处

1,提高了代码的复用性。

2,让类与类之间产生了关系,给第三个特征多态提供了前提.

示例代码:

声明:

/*
 1.继承的好处:
 1> 抽取重复代码
 2> 建立了类之间的关系
 3> 子类可以拥有父类中的所有成员变量和方法

 2.注意点
 1> 基本上所有类的根类是NSObject
 */

/********Animal的声明*******/
@interface Animal : NSObject
{
    int _age;
    double _weight;
}

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

- (void)setWeight:(double)weight;
- (double)weight;
@end

实现部分:

/********Animal的实现*******/
@implementation Animal
- (void)setAge:(int)age
{
    _age = age;
}
- (int)age
{
    return _age;
}

- (void)setWeight:(double)weight
{
    _weight = weight;
}
- (double)weight
{
    return _weight;
}
@end

/********Dog*******/
// : Animal 继承了Animal,相当于拥有了Animal里面的所有成员变量和方法
// Animal称为Dog的父类
// Dog称为Animal的子类
@interface Dog : Animal
@end

@implementation Dog
@end

/********Cat*******/
@interface Cat : Animal
@end

@implementation Cat
@end

运行程序:

#import <Foundation/Foundation.h>

int main()
{
    Dog *d = [Dog new];

    [d setAge:10];

    NSLog(@"age=%d", [d age]);
    return 0;
}

三、继承的注意点

注意:

1> 父类必须声明在子类的前面

2> 子类不能拥有和父类相同的成员变量

3> 调用某个方法时,优先去当前类中找,如果找不到,去父类中找

当要使用一个继承体系时,

1,查看该体系中的顶层类,了解该体系的基本功能。

2,创建体系中的最子类对象,完成功能的使用。

什么时候定义继承呢?

当类与类之间存在着所属关系的时候,就定义继承。xxx是yyy中的一种。

所属关系: is a 关系。

四、方法的重写

重写:子类重新实现父类中的某个方法,覆盖父类以前的做法

代码示例:

#import <Foundation/Foundation.h>
// Person
@interface Person : NSObject
{
    int _age;
}

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

- (void)run;

+ (void)test;

@end

@implementation Person

+ (void)test
{
    NSLog(@"Person+test");
}

- (void)run
{
    NSLog(@"person---跑");
}

- (void)setAge:(int)age
{
    _age = age;
}
- (int)age
{
    return _age;
}
@end

// 不允许子类和父类拥有相同名称的成员变量
// Student
@interface Student : Person
{
    int _no;
    // int _age;
}

+ (void)test2;

@end

@implementation Student
// 重写:子类重新实现父类中的某个方法,覆盖父类以前的做法
- (void)run
{
    NSLog(@"student---跑");
}

+ (void)test2
{
    [self test];
}
@end

int main()
{
    [Student test2];

//    Student *s = [Student new];
//
//    [s run];

    return 0;
}

五、继承的使用场合

继承的使用场合

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

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

A
 {
    int _age;
    int _no;
 }

 B : A
 {
    int _weight;
 }

 // 继承:xx 是 xxx
 // 组合:xxx 拥有 xxx

继承  VS  组合:

A
 {
     int _age;
     int _no;
 }

 B
 {
     A *_a;
     int _weight;
 }

时间: 2024-08-07 17:02:09

黑马程序员------OC面向对象之继承的相关文章

黑马程序员-OC面向对象继承关系和组合关系笔记

继承关系是描述类和类之间的关系,两个类分别称为子类和父类,子类继承了父类,子类就拥有了父类的属性和方法: 继承的关系特点描述出来就是:** "是" **  (例如:学生类 是 人类) 组合关系描述的语句是:**** "拥有" ***  (例如:学生有成绩这个属性,而成绩属性本来就是一个成绩类的对象 ) 继承示例代码: #import <Foundation/Foundation.h> //Animal类的声明 @interface Animal : NS

黑马程序员------OC面向对象之封装

---Android培训.iOS培训.Java培训,期待与您交流----- 一.面向对象和封装 面向对象三大特征:封装.继承.多态. 封装是对象和类概念的主要特性.它是隐藏内部实现,稳定外部接口,可以看作是"包装". 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 好处:使用更加简单  变量更加安全 可以隐藏内部实现细节  开发速度加快. 苹果官方文档中,有一个配图生动的阐释了封装: @interface用于给人们显

黑马程序员-OC面向对象多态笔记

面向对象的多态是建立在继承上,可以说没有继承就没有多态: 多态:父类指针指向了子类的对象: 1 int main() 2 { 3 //假设已定义了Animal类和它的子类Dog,那么多态的代码体现就是 4 Animal *a = [Dog d];//父类指针指向了子类对象 5 6 } 多态的定义是比较简单的,也好理解,关键在于它的指针动态绑定,究竟调用哪个方法: 1 #import <Foundation/Foundation.h> 2 3 //Animal类的声明 4 @interface

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

一.面向对象的三大特性:封装(成员变量).继承和多态 1. set方法和get方法 1. set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检.水龙头过滤,过滤掉不合理的东西),比如僵尸的生命值不能为负数 2. set方法 1) 作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值 2) 命名规范: ? 方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写 ? 形参名称不要跟成员变量同名 3

黑马程序员------OC面向对象之多态

-----iOS培训.Android培训.Java培训,期待与您交流----- 一.多态的基本概念 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态.引用Charlie Calverts对多态的描述--多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自"Delphi4 编程技术内幕").简单的说,就是一句话:允许将

黑马程序员-OC学习日记-继承、多态

------- ios培训. android培训.java培训.期待与您交流! ---------- 一.两个关键字self和super 1.局部变量与成员变量 (1)在方法内部可以定义与成员变量同名的局部变量. 在局部变量作用域内,会覆盖成员变量 (2)如果在方法内部定义了与成员变量同名的局部变量. 通过self访问成员变量,以区别局部变量 (3)全局变量是整个文件共享的,如果在一个方法中修改全局变量,在其他方法中使用这个全局变量都会修改 (4)就近原则: 查找顺序:局部变量  ->  成员变

【黑马程序员】————面向对象语法2

一.      set方法和get方法 1.          set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检.水龙头过滤,过滤掉不合理的东西),比如僵尸的生命值不能为负数 成员变量尽量不要用@public 2.          set方法 1)       作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤 2)       命名规范: 1> 方法名必须以set开头 2> set后面

黑马程序员-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,属性