Object C继承及实例变量的作用域

[main.m]

#import foundation/Foundation.h>

#import “Student.h”

//面向对象语言的特点:封装  继承 多态

//继承:也叫派生,子类继承父类,在交类的继承派生自己的实例变理及方法

//peson 类 student类:peson类是student的父类。student类是pdeson类的子类

//superClass父类的访问,subClass子类的访问

//parentClass父亲的访问,childClass 子类的访问

//OC的写法

//@interface Student:person  //student 类继承于person类

//@end

//子类继承父类,子类继承父类非私有的实例变量及非私有的方法

//子类实例变更构成=父类实例变量+子类自定义的实例变量

//子类方法构成=父类非私有方法+子类自定义的方法

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

@autorelesepool{

Student *stu=[[Student alloc]] init];

//继承父类的方法

stu.name=@”小飞”;

stu.age=12;

//子类自定义的方法

stu.num=45;

stu.score=99;

[stu printStudent];

打印结果:name=小飞 age=12

                   num=45  score=99

}

//受保护的

//stu->_weight=45.7//不可以直接访问受保护的实例变量

//通过setter,getter方法访问受保护的实例变量

stu.weight=56.7;

NSLog(@”weight=%.2f”,stu.weight);

打印结果:weight=56.7

//私有的

//stu->_height=100;//不可以直接访问私有的实例变量

sut.height=178;

NSLog(@”height=%.2f”,stu.height);//类外需通过setter,getter方法间接访问

打印结果:height=178

//公共的

sut->_place=@”北京”;

NSLog(@”place=%@”,stu->_palce)

打印结果:pace=北京

}

return 0;

}

//创建一个person类

【person.h】

#import <foundation/Foundation.h>

@interface Person:NSObject

{

NSString *_name;

NSInteger _age;

//实例变量作用域

@protected //(缺省)受保护的实例变量,在当关类内可以直接访问,子类可以直接继承,在类外不可以直接访问,可以通过方法(setter,getter方法)的调用间接访问

float _weight;

@private //私有的实例变量,在当前类内可以直接访问,子类不能继承,子类可以通过方法间接访问,在类外不能直接访问。

float _height;

@public //公共的实例变量,在当前类内可以直接访问,子类可以直接继承,类外也可以直接访问,通过->(指针运算符)直接访问

NSString *_palce;

}

@property(nonatomic,assign)float weight;

@Property(nonatomic,assign)folat height;

@property (nonatomic,copy)NSString *name;

@property(nonatomic,assign)NSInteger age;

//默认展开的实例变理是私有变量,若放更改为受保护的在{}中定义即可

@proerty(nonatomic,copy)NSString *fristName;

@end

【person.m】

#import “person.h”

@implementation Person

//setter方法

-(void)setHeight:(float)height

{

_height = height;

}

//getter方法

-(float)height

{

return _height;

}

@end

【创建Student类,继承 Peson类】

【Student.h】

#import “person.h”

@interface Student:person

{

NSInteger _num ;//学号

NSInteger _score;//分数

}

@property (nonatmic,assign)NSInteger num;

@property (nonatmic,assign)NSInteger score;

//缺省的

-(void)print Student;

//受保护的

-(void)changeWeight;

//私有的

-(void)changeHeight;

//公共的

-(void)changPlace;

//未定义在实例变量{}中使用的property关键字

-(void)chantFirstName;

@end

【Student.m】

#import “Student.h”

@implementation Student

-(void)printStudent

{

//访问从父类继承的实例变量

NSLog(@”name=%@” age=%li,_name,_age);

//访问自定义的实例变量

NSLog(@num=%li score=%li”,_num,_score);

}

//受保护的

-(void)changeWeight{

_weight=56.7;

}

//私有的

-(void)changeHeight{

{

//_height=45;//子类不能继承父类的私有实例变量

self.height=176;//通过调用setter方法,间接访问私有实例变量;

}

//公共的

-(void)chantPlace

{

_palce=@”上海”;

}

//未定义实例变量,使用的是property关键字;

-(void)chantFirstName{

//_firstName=@”小飞”; 无法调用,因property关键字是将实例变量展开到.m文件

}

@end

    原文作者:奔跑的小小鱼
    原文地址: https://www.jianshu.com/p/8c5e33b8f280
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞