1:self是类的隐藏的参数,指向当前调用方法的类,另一个隐藏参数是_cmd,代表当前类方法的selector。

2:super并不是隐藏的参数,它只是一个"编译器指示符",它和self指向的是相同的消息接受者

3:当使用self调用方法时,会从当前类的方法列表中开始寻找,如果没有,就从父类中再找,而使用super时,则从父类的方法列表中开始找,然后调用父类的这个方法


具体看代码实现方法(详细看代码中的注释)

一:看PersonSelf.h声明文件

//
//  PersonSelf.h
//  PersonSelf
//
//  Created by hmjiangqq on 14-1-22.
//  Copyright (c) 2014年 hmjiangqq. All rights reserved.
//

#import <Foundation/Foundation.h>
@class Student;  //@class一般用在头文件中
@interface PersonSelf : NSObject
{
    
    //声明两个实例变量
    int age;
    NSString * name;
    Student *s;
}

//定义方法
-(NSString *) getName;
-(void) setName:(NSString *)_name;
-(int) getAge;
-(void)setAge:(int)_age;
@end
二:PersonSelf.m实现文件

//
//  PersonSelf.m
//  PersonSelf
//
//  Created by hmjiangqq on 14-1-22.
//  Copyright (c) 2014年 hmjiangqq. All rights reserved.
//

#import "PersonSelf.h"
#import "Student.h" //#import一般使用在实现文件中
@implementation PersonSelf
-(id)init{
    if(self=[super init]){  //super可以调用父类中的方法
        s=[[Student alloc]init];
        NSLog(@"student:%@\n",s);
    }
    return  self;
}
-(NSString *) getName{
    return  name;
}
-(void) setName:(NSString *)_name{
    name=_name;
    [self setAge:14];//self可以去调用本类对象中的方法
    NSLog(@"setAge");
    NSLog(@"self class is: %@\n",[self class]);
    NSLog(@"super class is: %@\n",[super superclass]);
    
}
-(int) getAge{
    return  age;
}
-(void)setAge:(int)_age{
    age=_age;
}
@end