黑马程序员技术交流社区
标题:
oc中类的继承与派生
[打印本页]
作者:
vyqrvwgf
时间:
2015-11-3 21:13
标题:
oc中类的继承与派生
1.基类和派生类之间的关系
1)基类的私有属性能被继承但是不能被使用
2)oc中的继承是单继承,每一个子类只能继承一个父类
3)继承需要贯彻合理性
2.方法的重写
从父类继承的方法,可能不适用于子类,可以重写方法
#import <Foundation/Foundation.h>
@interface Animal:NSObject
-(void)run;
@end
@implementation Animal
-(void)run{
NSLog(@"动物在跑");
}
@end
@interface Dog : Animal
@end
@implementation Dog
//父类中动物在跑不适合Dog,重写run方法
-(void)run{
NSLog(@"狗在跑");
}
@end
int main(){
Animal *a=[Animal new];
Dog *d=[Dog new];
[a run];
[d run];
return 0;
}
复制代码
3.实例变量修饰符
1)@public
任意程序集
2)@protected
同一类和派生类(默认)
3)private
同一类
4.oc中的私有变量和私有方法
1)私有变量
在.m中也可以声明成员变量,因为其他文件都只会导入头文件,所以在.m中声明成员变量是私有的,等同于private
#import<Foundation/Foundation.h>
Person.h
@interface Person:NSObject
{
int _age;
}
-(void)run;
@end
Person.m
//只能在Person.m中使用
int m=10;
@implementaion Person
-(void)run{
NSLog(@"正在跑,速度是%d",m);
}
@end
main.m
int main(){
Person *p=[Person new];
[p run];
return 0;
}
复制代码
2)私有方法
在.h中没有生命,在.m中实现,该方法被称为私有方法,不能被子类继承,也不能背访问,可以在意境声明的方法中使用self方法访问private变量。
5.description方法重写
Person *p=[Person new];
NSLog(@"%@",p);
此时会打印p的地址
重写description方法
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
}
-(void)setAge:(int)age;
-(int)age;
@end
Person.m
#import "Person.h"
@implementation Person
-(void)setAge:(int)age{
_age=age;
}
-(int)age{
return _age;
}
-(instancetype)init{
self=[super init];
if(self){
_age=25;
}
return self;
}
//重写description方法,当用%@打印对象时,返回p的属性。
-(NSString *)description{
return [NSString stringWithFormat:@"age=%d",self.age];
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p=[Person new];
NSLog(@"%@",p);
}
return 0;
}
复制代码
作者:
daitoudainaoali
时间:
2015-11-3 22:39
收益匪浅,加油!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2