//
// main.m
// OC_2方法
//
// Created by YIem on 15/11/25.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

import "Person.h"

import "Student.h"

import "CollegeStuent.h"

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

// 定义类-->创建对象->>使用对象
// 1.开辟空间
// 2.初始化
Person *p = [[Person alloc] init];
// 赋值和取值
[p setandget];

// 调用带参数的方法(实参)

[p sayHiWithName:@"随便"];

// 成员变量
// 赋值
[p setName:@"随便名字"];
// 取值
NSLog(@"%@", [p name]);

*/
// 创建对象

if 0

Student *dawa = [[Student alloc] init];
// 赋值
[dawa setName:@"12"];
[dawa setNumber:1];
[dawa setNicheng:@"大娃"];
// 取值
NSLog(@"%@ %ld %@", [dawa name], [dawa number], [dawa nicheng] );

Student *erwa = [[Student alloc] init];
[erwa setName:@"11"];
[erwa setNumber:2];
[erwa setNicheng:@"二娃"];
NSLog(@"%@ %ld %@", [erwa name], [erwa number], [erwa nicheng]);

endif

// 继承使用
// 父类创建
Student *s = [[Student alloc] init];
[s study];
// 子类创建
CollegeStuent *cs = [[CollegeStuent alloc] init];
// 方法查询机制: 先找子类中是否重写 如果没有 找父类 直到根类中 如果还没有 则崩溃(unrecognized selector sent to instance)
[cs study];




return 0;

}



//
// CollegeStuent.h
// OC_2方法
//
// Created by YIem on 15/11/25.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

import "Student.h"

// 面向对象三大特性: 继承 封装 多态
// 继承: 子类拥有父类所有的成员变量和方法
// 单(根)继承: 每一个类只有一个父类 唯一一个没有父亲的类是NSObject 叫根类(祖宗类) 包含了所有类都需要的基本信息
// 传递性: A是B的父类 B说C的父类 C中也有A的内容
// 相对性: 父类和子类需要参照物来描述
// 单向性: 已经作为子类的类 不能在成为该类父类的父类
@interface CollegeStuent : Student
{


NSString *_tanLianAi;// 谈恋爱
NSString *_treeNewBee;// 吹牛逼

}
// getter&setter

  • (void)setTanLianAi:(NSString *)tanlianai;
  • (NSString *)tanlianai;
  • (void)setTreeNewBee:(NSString *)treenewbee;
  • (NSString *)treenewbee;
    @end

//
// CollegeStuent.m
// OC_2方法
//
// Created by YIem on 15/11/25.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import "CollegeStuent.h"

@implementation CollegeStuent

  • (void)setTanLianAi:(NSString *)tanlianai
    {
    _tanLianAi = tanlianai;
    }
  • (NSString *)tanlianai
    {
    return _tanLianAi;
    }
  • (void)setTreeNewBee:(NSString *)treenewbee
    {
    _treeNewBee = treenewbee;
    }
  • (NSString *)treenewbee
    {
    return _treeNewBee;
    }

// 父类重写
// 子类中重新实现和父类中声明的一致的方法 叫做重写

  • (void)study
    {

    // super 编译器指令 通过super指令 调用父类中的方法
    [super study];
    // self (对象)对象自己 通过self等于当前类的方法
    [self doHomework];
    NSLog(@"大学生 学习");

    }

  • (void)doHomework
    {

    NSLog(@"大学生 写作业");

    }

@end



//
// Student.h
// OC_2方法
//
// Created by YIem on 15/11/25.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

@interface Student : NSObject
{

NSString *_name;
NSInteger _number;
NSString *_nicheng;

}
// getter&setter

  • (void)setName:(NSString *)name;
  • (NSString *)name;
  • (void)setNumber:(NSInteger)number;
  • (NSInteger)number;
  • (void)setNicheng:(NSString *)nicheng;
  • (NSString *)nicheng;
    // 普通方法
  • (void)study;
  • (void)doHomework;
    @end

//
// Student.m
// OC_2方法
//
// Created by YIem on 15/11/25.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import "Student.h"

@implementation Student

  • (void)setName:(NSString *)name
    {
    _name = name;
    }
  • (NSString * )name
    {
    return _name;
    }
  • (void)setNumber:(NSInteger)number
    {
    _number = number;
    }
  • (NSInteger)number
    {
    return _number;
    }
  • (void)setNicheng:(NSString *)nicheng
    {
    _nicheng = nicheng;
    }
  • (NSString *)nicheng
    {
    return _nicheng;
    }
  • (void)study
    {
    NSLog(@"学生 学习");
    }
  • (void)doHomework
    {
    NSLog(@"学生 写作业");
    }

@end



//
// Person.h
// OC_2方法
//
// Created by YIem on 15/11/25.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

@interface Person : NSObject
{

// 成员变量
NSString *_name;
NSString *_sex;

//#error duplicate member"_sex"

warning NSInteger等基础类型 一定不要加*

NSInteger _age;
CGFloat _height;
CGFloat _weight;

}
// 方法

  • (void)setandget;
    // 无返回 无参数的方法
  • (void)sayHI;
    // 无返回 带一个参数

// sayHiWithName 参数描述
// : 参数标识
// (NSString *) 参数类型
// name 参数名 /形参

  • (void)sayHiWithName:(NSString *)name;
    // 方法名只包含: 参数描述和参数标识

// 方法名: sayHiwithName:age:

  • (void)sayHiWithName:(NSString *)name

                  age:(NSInteger)age;

    // 方法名: sayHiWithName::

  • (void)sayHiWithName:(NSString *)name

                     :(NSInteger)age;

    // 两个参数

  • (void)sayHiWithName:(NSString *)name

                  age:(NSInteger)age;

    // 多参数

  • (void)sayHiWithName:(NSString *)name

                  age:(NSInteger)age
                  age:(NSInteger)age
                  age:(NSInteger)age
                  age:(NSInteger)age
               height:(CGFloat)height
               weight:(CGFloat)weight
                  sex:(NSString *)sex;
    
  • (void)suibian;

// 标准的赋值方法&取值方法
// setter(设置器)&getter(访问器)
// set+首字母大小不带下划线的成员变量名

  • (void)setName:(NSString *)name;
    // 小写字母开头不带下划线的成员变量名
  • (NSString *)name; // 直接用Name

@end


//
// Person.m
// OC_2方法
//
// Created by YIem on 15/11/25.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import "Person.h"

@implementation Person

  • (void)setandget
    {

    _name =@"名字";
    _sex = @"性别";
    _age = 10;
    _height = 180;
    _weight = 160;
    NSLog(@"%@%@%ld%f%f", _name, _sex, _age, _height, _weight);

    }

  • (void)sayHI
    {

    NSLog(@"Hello");

    }

  • (void)suibian
    {

    NSLog(@"随便");

    }

  • (void)sayHiWithName:(NSString *)name
    {

    // 参数name为形参 保存外部传人内容
    NSLog(@"参数: %@", name);
    // 吧参数赋值给成员变量
    _name = name;
    NSLog(@"成员变量: %@", _name);

    }

// getter&setter 实现
// setter设置成员变量

  • (void)setName:(NSString *)name
    {

    _name = name;

    }

// getter返回成员变量

  • (NSString *)name
    {
    return _name;
    }

@end