黑马程序员—14-oc的继承

一、    继承概念

继承用在类于类之间,子类可以拥有父类所有变量成员和方法。

子类跟父类不能有相同的成员变量,方法实现可以相同

子类重写父类的某个方法,代表着重写

注意点:

1.   父类声明必须写在子类前面

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

3.  调用某个对象的方法时,优先去当前对象中寻找,如果找不到去父类中寻找

4.    坏处就是耦合性太强,就是两个类之间关系太紧密

二、    继承的使用场合

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

Ø  当A类拥有B类中的属性和方法时,就可以考虑让B类,就可以考虑让B类继承A类

u  继承跟组合

继承   xx拥有xxx

组合   xxx拥有xxx

三、    Super的作用

Ø  直接调用父类中的某个方法

Ø  Super处在对象方法中,就会调用父类的对象方法,super处在类方法中,那么就会调用父类的类方法

Ø  使用在子类重写父类的方法,想保留父类的某些行为

四、    继承的基本使用

#import<foundationg/foundation.h>

//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

# import<Foundation/Foundation.h>

@interface Dog : Animal

@end

@implementation Dog

@end

//Cat类,继承了Animal

# import<Foundation/Foundation.h>

@interface Cat : Animal

@end

@implementation Cat

@end

int main()

{

Dog* dog = [Dog  new] ;

[dog  setAge : 10]

Cat* cat = [Cat  new];

[cat       setWeight: 10];

NSLog(@”age = %d,weight = %d”,[Dog   age],[Cat    weight]);

return0;

}

输出结果:age = 10 ,weight= 10

上面例子类之间的关系可用下图表示:

五、    组合的基本使用

定义一个成绩类

#import<Foundation/Foundation.h>

@interface Score:NSObject

{

int _ c_Score;

int _ oc_Score;

}

@end

@implementationScore

@end

//定义一个学生

#import<Foundation/Foundation.h>

@interface Person: NSObject

{

Score * _score;

int _ age;

}

@end

@implementationPerson

@end

六、    super的基本使用

#import <Foundation/Foundation.h>

//僵尸(父类)

@interface Zoombie : NSObject

- (void)walk;

+ (void)test;

- (void)test;

@end

@implementation Zoombie

- (void)walk

{

NSLog(@"往前走两步");

}

+ (void)test

{

NSLog("test类方法被调用了");

}

- (void)test

{

NSLog("test对象方法被调用了");

}

@end

//跳跃僵尸(子类)

@interface JumpZoombie : Zoombie

+ (void)test2;

@end

@implementatioon :JumpZoombie

+ (void)test2

{

[supertest];

}

- (void)walk

{

//要求先跳一下

NSLog(@"先跳一下");

//再走两步,使用super调用父类的walk方法

[superwalk];

}

@end

int main()

{

JumpZoobie *jz = [JumpZoobie new];

[jzwalk];

[jztest2];

return0;

}

输出结果:先跳一下

往前走两步

test类方法被调用了

时间: 2024-10-29 19:13:29

黑马程序员—14-oc的继承的相关文章

【黑马程序员】————OC特有语法

一.点语法 点语法的本质还是方法调用 p.age = 10; // [p setAge:10]; int a = p.age; // [p age]; 二.成员变量的作用域 @public : 在任何地方都能直接访问对象的成员变量 @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private) @protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected) @package : 只要处在

黑马程序员——java基础--面向对象--继承

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 继承: 1.当一个类中包含了另一个类的所有变量个方法时,但另一个类中不包含另一个类的所有变量和方法时,表示范围比较小的就可以作为另一个的父类. 集合表示:A属于B,B不属于A,A就可以作为B的父类,B继承A 2.当只是为了获取其他类的功能的时候,不能为了简化代码而继承. 3.必须是类与类之间的所属关系才可以继承,所属关系看前面集合 继承的特点: 1.不支持多继承,只支持单继承: 多继承的话容易

黑马程序员——Java基础——面向对象——继承、抽象类、接口、多态、包、内部类、异常等

第一讲 继承 1.继承: 当多个类拥有相同的功能时,那么这些类不需要每个都写这些相同的功能,只需要把相同功能抽到 一个单独的类中,继承这个类就能获得这些相同的功能: (1)继承的体系结构:就是对要描述的事物进行不断的向上抽取,就出现了体系结构. 要了解这个体系结构中最共性的内容,就看最顶层的类. 要使用这个体系的功能,就用最底层的类创建对象 (2)好处: A.提高代码复用性: B.继承的出现,让类与类之间产生关系,为多态的前提 (3)特点: A.只能单继承(准确的说是java对多继承进行优化,避

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

OC 的三大特性:封装.继承.多态. 封装:过滤不合理的值 #import <Foundation/Foundation.h> // set 方法 // 作用:提供一个方法给外界设置成员变量,可以在方法对成员变量进行赋值和过滤 // get 方法 // 作用:返回对象内部的成员变量,得到成员变量的值. @interface Student : NSObject { // 成员变量名的命名规范 // 成员变量名肯定以下划线开头 // 好处:可以区分参数名称和成员变量的名称,也可以区分变量名和成员

【黑马程序员】OC基本语法——类与对象相关概念

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 最近在学OC的面向对象部分,可能是因为以前学Java和PHP时习惯了主流的面向对象思想,接触到OC的面向对象有很多说法都不习惯,查了很多东西,终于基本都搞清楚了,在这里小结一下. 一.类和对象 1.类:类是一个抽象概念,代表着一类事物,如:人,动物,交通工具等:这个和Java或PHP里类的概念没有区别. 其定义方法如下: @interface Student : NSObject { NSSt

黑马程序员-Java基础-面向对象—继承、构造函数、重写、final、抽象类、接口

第一讲  继承 1.  继承的作用 1) 提高代码复用性: 2) 让类与类之间产生了关系: 2.  java继承特点 1) java只支持单继承,不支持多继承 因为多继承容易带来安全隐患:当多个父类中定义了相同功能,但功能内容不同时,子类对象不确定要运行哪一个. 2) java支持多层继承:可以形成一个继承体系 利用一个继承体系的方法:阅读体系父类,了解共性功能(该体系的基本功能),具体要调用这些基本功能时,需要创建最子类的对象,为什是最子类: 一是:父类有可能不能创建兑现(如,静态类或接口):

黑马程序员——14,String相关知识点

------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- /* 下面介绍的是String类相关方法的知识点 */ class Zifuchuan { public static void main(String[] args) //主函数 { String a="yiersan"

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

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

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

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

黑马程序员-OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下 // 声明 @interface  类名  (分类名称) @end // 实现 @implementation 类名 (分类名称) @end 2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发: 3:分类使用注意: a:分类不能增加成员变量,只能对原类增加方