[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
@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