04继承,初始化,指针

一、继承
1.子类可以使用父类的方法和属性
2.子类可以拥有自己的方法和属性
3.父类不能使用子类的方法和属性
4.子类可以重写父类的方法
4.1 不完全重写,子类在父类原有方法的基础上,增添自己的功能
4.2 完全重写,方法名不变,方法体完全改变
5.OC中没有多继承

二、初始化
1.先调用父类的初始化方法
2.判断self是否为空。防止[super init]方法没有执行,导致程序崩溃

#import "People.h"

@implementation People
//初始化方法一
- (id)initWithWeight:(float)weight Height:(float)height
{
    //1.先调用父类的初始化方法
    //super:父类
    //self:本类,当前类
    self = [super init];
    //2.判断self是否为空。防止[super init]方法没有执行,导致程序崩溃
    if (self != nil)
    {
        _weight = weight;
        _height = height;
    }
    return self;
}
@end

三、指针

//
//  main.m
//  Pointer
//
//  Created by mac on 16/2/25.
//  Copyright (c) 2016年 ZHIYOU. All rights reserved.
//

#import 
#import "People.h"
#import "Man.h"
int main(int argc, const char * argv[])
{
    //p是指针。p-->[People alloc]:路牌-->路,路牌是指针。
    //指针:用于指向对象所在的内存地址
    //注意:在同一时刻,一个指针只能指向一个对象(内存地址),不能同时指向多个对象。
    People * p = [[People alloc] init];
    NSLog(@"%@",p);
    p = [[People alloc]init];
    NSLog(@"%@",p);
    
    //多态
    Man * m = [[Man alloc] init];
    //p1是People类型,[Man alloc]的对象是Man类型
    //p1是父类People的指针,[Man alloc]返回的是子类Man的对象
    People * p1 = [[Man alloc]init];
    p1.weight = 10;
    //子类的指针不能指向父类的对象。
    //    Man * m1 = [[People alloc]init];
    NSLog(@"p1.weight = %f",p1.weight);
    
    //每次alloc都是重新创建了一个对象
    //所以[[Man alloc]init].weight的值不是50,而是0.
    //通过指针,如果某个指针不改变指向,那么就可以持续性对对象进行操作;
    //如果没有指针的存在,那么对对象的操作就是一次性的。
    [[Man alloc]init].weight = 50;
    NSLog(@"[Man alloc].weight = %f",[[Man alloc]init].weight);
    return 0;
}

你可能感兴趣的:(04继承,初始化,指针)