#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString * name;
int age;
}
-(id)initWithNameAndAge:(NSString*)aName andAge:(int)aAge; //类初始化构造方法
-(NSString *) getName;
-(void)name:(NSString *)aName;
-(int)getAge;
-(void)age:(int)aAge;
-(void) print;
@end
Person.m
#import "Person.h"
@implementation Person
- (id)init //初始化方法使用
{
if (self= [super init])
{
name = nil;
age = 0;
}
return self;
}
-(id)initWithNameAndAge:(NSString*)aName andAge:(int)aAge //多参数传值
{
if (self= [super init])
{
name = aName;
age= aAge;
}
return self;
}
-(NSString *) getName{
return name;
}
-(void)name:(NSString *)aName{
if (name!=aName) {
[aName retain]; //内存管理
[name release];
name = aName;
}
}
-(int)getAge{
return age;
}
-(void)age:(int) aAge{
age = aAge;
}
-(void) print{
NSLog(@"名字是:%@,年龄是:%d",name,age);
}
-(void) dealloc //销毁方法使用
{
[name release]; //销毁对象的时候发送release消息给name。
[super dealloc];
}
@end
#import <Foundation/Foundation.h>
#import "Person.h"
@interface Student : Person
{
@private //访问限定
float math; //数学科目的成绩
float english; //英语科目的成绩
NSMutableArray * courses; //NSMutableArray可变数组的使用
}
@property float math; //属性的使用
@property float english;
-(id)initWithProperty:(NSString *)aName age:(int)aAge math:(float)aMath english:(float)scoreEnglish courseArray:(NSMutableArray *) array;
-(NSMutableArray *)getCourses;
-(void) courses:(NSMutableArray *) array;
-(void) print;//继承与多态 重写
@end
#import "Student.h"
@implementation Student
@synthesize math;
@synthesize english;
- (id)init
{
if (self = [super init])
{
name =@"写哈娜"; //成员变量直接赋值
[self age:20]; //调用父类的方法赋值
math = 0;
english = 0;
courses = nil;
}
return self;
}
-(id)initWithProperty:(NSString *)aName age:(int) aAge math:(float)aMath english:(float)scoreEnglish courseArray:(NSMutableArray *) array;
{
if (self = [super init])
{
[aName retain];
[name release];
name = aName;
age =aAge;
math = aMath;
english = scoreEnglish;
courses = array;
}
return self;
}
-(NSMutableArray *)getCourses{
return courses;
}
-(void) courses:(NSMutableArray *) array{
[array retain];
[courses release];
courses = array;
}
-(void) print{//继承与多态 重写
NSLog(@"我是学生,我继承了person类,重写了print方法");
NSLog(@"我的名字是:%@,年龄是:%d\n",name,age);
NSLog(@"数学成绩%f,英语成绩%f",math,english);
NSEnumerator *enumerator = [courses objectEnumerator];
id obj;
while(obj = [enumerator nextObject]){
NSLog(@"%@\n",[obj description]); //嵌套使用C和使用 枚举类 NSEnumerator
}
}
-(void) dealloc
{
[name release];
[courses release]; //销毁对象的时候发送release消息给NSMutableArray
[super dealloc];
}
@end
Student+privateSay.h
#import "Student.h"
@interface Student (privateSay)
-(void) privateSay;
@end
#import "Student+privateSay.h"
@implementation Student (privateSay)
-(void) privateSay{
NSLog(@"这是学生的类别方法");
}
@end
#import <Foundation/Foundation.h>
//协议一
@protocol sayPrint<NSObject>
@optional
-(void) sayHello;
@required
-(void) sayPrint;
@end
//协议二
@protocol sayPrint2<NSObject>
@optional
-(void) sayHello2;
@required
-(void) sayPrint2;
@end
Teacher.h
#import "Person.h"
#import "sayPrint.h"
@interface Teacher : Person<sayPrint,sayPrint2> {//实现协议
NSString * number;
}
@property(retain) NSString * number; //属性的使用
-(id)initWithNumber:(NSString*)aNumber;
@end
#import "Teacher.h"
@implementation Teacher
@synthesize number = number; //属性的一些定义
- (id)init
{
if (self = [super init])
{
number = nil;
}
return self;
}
-(id)initWithNumber:(NSString*)aNumber{
if (self = [super init])
{
[aNumber retain];
[number release];
number = aNumber;
}
return self;
}
//实现协议sayPrint中的必须方法
-(void) sayPrint{
NSLog(@"开始上课");
}
//实现协议sayPrint2中的必须方法
-(void) sayPrint2{
NSLog(@"又一次开始上课");
}
@end
#import <Foundation/Foundation.h>
@class Student; //@class 实现复合关系 引入类名
@class Teacher;
@interface TeacherService : NSObject
-(void) do;
@end
teacherService.m
#import "TeacherService.h"
#import "Teacher.h"
#import "Student.h"
@implementation TeacherService
-(void) do{
Teacher *teacher = [[Teacher alloc] initWithNumber:@"202"];
[teacher sayPrint];
Student *stu=[[Student alloc] init];
stu.math=90; //属性的打点使用
stu.english = 91;
NSMutableArray *mutable = [[NSMutableArray alloc] initWithObjects:@"数学",@"英语",@"物理",nil]; //nil的使用
[stu courses:mutable];
[stu print];
[stu initWithProperty:@"ddd" age:20 math:70 english:90 courseArray:mutable];
[stu print];
[mutable release];
[stu release];
[teacher release];
}
@end
#import <Foundation/Foundation.h>
#import "TeacherService.h"
int main(int argc, const char * argv[])
{
// @autoreleasepool {
//
// // insert code here...
// NSLog(@"Hello, World!");
//
// }
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //自动释放池使用
TeacherService * service = [[TeacherService alloc]init];
[service do];
[service release]; //手动释放内存
[pool release];
return 0;
}