一、继承
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 <Foundation/Foundation.h>
#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;
}