oc基础第四天-继承


// Xcode文档离线安装方法

1)下载文档的离线文件 com.apple.adc.documentation.AppleiOS8.0.iOSLibrary.docset 注意后缀一般都是:.docset

2)找到DocSets目录 /Applications/Xcode.app/Contents/Developer/Documentation



//*******************  方法重载问题

方法重载的概念

方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参 数的个数。调用重载方法时,其他语言(Javac++)编译器能通过检查调用的方法的参数类型和 个数选择一个恰当的方法。方法重载通常用于创建完成一组任务相似但参数的类型或参数的个数 不同的方法

//****************

OC中没有方法重载  //!!!!!!!!!!!但是OC中有重写的概念

oc,方法名不允许相同。(方法名包含:


.selfsuper&static:

self:

1. self理解:谁调用当前方法, self就代表谁.

比如:

在对象方法中,self代表的是对象,因为只有对象才可以调用对象方法

在类方法中,self代表的是类,因为只有类名才可以调用类方法.


[self 方法名称]; 调用其它方法(类方法/对象方法)

self可以简单理解为指自己


2. 获取当前对象的类:  Person *p = [Person new];

[p class] = [Person class] = Person  //!!!!


3. 在对象方法中可以通过 self->_speed访问成员变量.


super:

代表的是当前类的父类.


static关键字:

1. c语言中static可以修饰局部变量、全局变量、函数

2. OC,不能用来修饰实例变量和方法, 但是可以修饰局部变量, 全局变量


.继承和派生:

继承格式:

@interface Cat : Animal


@end

//用冒号表示继承

继承定义: 子类拥有了父类的属性和方法.


派生: 父类向下产生子类的过程称为派生


继承的注意事项:

1. 子类不能定义和父类同名的变量,但是可以继承父类的变量

2. OC类支持单一继承,不支持多继承


//方法的重写:

方法的重写,从父类继承的方法,可能这个方法并不适合子类,可以在子类中重写父类的方法。

重写之后,父类的对象调用父类的方法;子类的对象,调用子类的方法,不会引起冲突。

重写后,子类可以通过super调用父类的方法。


继承体系中方法调用的顺序

1、在自己类中找

2、如果没有,去父类中找

3、如果父类中没有,就去父类的父类中

4、如果父类的父类也没有,就还往上找,直到找到基类(NSObject)

5、如果NSObject都没有就报错了


.实例变量修饰符:

作用范围:

@public :       作用于所有的类

@protected作用于当前类,子类(派生类)

@private:       作用于当前类

@package:     作用框架级别的


(1)@public (公开的)在有对象的前提下,任何地方都可以直接访问。

(2)@protected (受保护的)只能在当前类和子类的对象方法中访问

(3)@private (私有的)只能在当前类的对象方法中才能直接访问

(4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通 过变量名访问


实例变量作用域使用注意事项

(1)@interface @end之间声明的成员变量如果不做特别的说明,那么其默认是protected 的。

//************************** 面试题 ************

@private 类型的变量,能否被子类继承?

//子类可以继承父类的所有实例变量和方法

//但是,不是所有的都可以访问

@private 类型的变量,能否被子类访问?

 //不能访问

(2)一个类继承了另一个类,那么就拥有了父类的所有成员变量和方法,注意所有的成员变量它都拥有,只是有的它不能直接访问。


.私有变量&私有方法:

默认情况下实例变量属于@protected修饰.

定义格式:

.m文件当中定义

@implementation Person : NSObject

{

    int  age;   //  私有变量    是全局变量,也是实例变量

}


// 不在.h文件中声明只在.m文件中实现

-(void)run{

    

    NSLog(@"我是私有方法");

}

@end


私有方法只能在当前文件中使用,不能被子类继承.



.description方法

1. description方法默认返回对象的描述信息(默认实现是返回类名和对象的内存地址) ;

2. 重写description方法:

-(NSString *)description{

    return [NSString stringWithFormat:@"狗腿的个数:%d,狗的眼睛个数:%d",_tuiNum, _eyeNum];

}


3. 千万不要在description方法中同时使用%@self

- (NSString *)description {

    return [NSString stringWithFormat:@"%@", self];

}

同时使用了%@self,代表要调用selfdescription方法,因此最终会导致程序陷入死循环,循环调用description方法


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值