OC封装继承和实例化

[Person new] 做了三件事:

1)申请内存空间

2)给实例初始化

3)返回空间首地址

实例变量保存在堆区

``指针(对象名)保存在栈区

对象方法保存在代码区

调用方法先找到p所指向的堆区的指针—isa然后再找到isa所指向的代码区的方法

对象方法只能由对象来调用,类方法只能由类来调用,不能当做函数来调用

函数属于整个文件,函数的声明可以在main内部,也可以在main函数外面,除了@interface @end之间

函数:

1)所以函数都是平行的

2)函数不存在隶属关系

3)使用时可以直接掉用

4) 不可以访问对象中的成员变量

@interface @end 不可以嵌套

在声明时不可以对成员变量初始化

成员变量和方法不可以用static修饰

[Person new]做了三件事:

1)申请内存空间

2)给实例变量初始化

3)返回空间首地址

申请空间在内存的哪个区:

new的时候申请的空间在空间的堆区

如果实例变量是基本类型,此时初始化为0.

如果是字符串类型,则初始化为null

实例变量又保存在什么地方

堆区

p(指针变量名)栈区

对象方法保存在代码区

为什么[p run]; 就可以调用方法了?如何调用的

首先找p对应的空间,然后找到_isa,再找到_isa所指向的代码空间,然后到该空间中找方法

15)类方法:

类方法调用不需要实例

类方法的调用 [类名称 类方法名称]

类方法名称和对象方法名称可以相同

类方法的好处是不需要创建对象,直接通过类名进行访问,不需要在堆区创建任何空间

类方法中不允许访问实例变量,可以传个参数

实例方法可以访问实例变量

对象方法可以调用对象的其它方法

在类方法中可以调用类的其它方法,可以用self,也可以使用其它类名调用方法方法

在类方法中也可以调用对象方法,只不过是通过参数把对象传过来或创建一个对象

类方法不能调用自身(死循环)

[[Car alloc] init] 等同于[Car new]

匿名类作为方法参数使用:

Person *p = [[Person alloc] init]

[p gohome:[Car new]];

16)封装:

实例变量只能被当前类的对象方法访问

set方法的书写规范:

1)set方法一定是一个对象方法

2)set方法一定不能有返回值

3)set方法必须以set开头

4)set之后跟的是实例变量去掉下划线,并且首字母大写

5)set方法一定有参数,而且参数类型和实例变量的类型一致

6)oc中没有方法重载,oc中方法不能同名

7)static 定义的变量只能在当前文件中使用

17)self:

self指调用当前方法的对象

self在当前类方法中指代当前类

Person *p = [Person new];

[p class]; //返回当前类

函数内部可以定义和全局变量同名的变量

如果同名,局部变量会暂时屏蔽全局变量的作用域(可以用self来区分)

18)继承:

基类的私有属性能被继承,但不能使用

oc中是单继承

调用对象方法先查找本类中是否有方法,否则查找父类

支持多层继承

变量默认修饰符是@protect

@private 只能在当前类的对象方法中使用

.m中定义的变量就是私有变量

没有在.h中声明的方法是私有方法

私有方法不能被子类继承

NSLog("%p", d); 打印对象地址

NSLog("%@", d); 打印类名+对象地址

以%@的格式打印对象d,此时调用对象的description方法,如果子类中没有重写description方法则调用父类的

[d class]; 获取Dog类

类方法不能访问实例变量

不要在description方法中使用%@和self会造成死循环

时间: 2024-10-12 15:50:01

OC封装继承和实例化的相关文章

oc 封装/继承/多态-一看就明白

镔哥哥就不多说,简单介绍单面: // //  Person.h //  封装继承多态 // //  Created by apple on 14/12/29. //  Copyright (c) 2014年 huweibin. All rights reserved. // /* 封装:隐藏内部实现,稳定外部接口. 封装就是定义类定义属性 定义方法 */ #import <Foundation/Foundation.h> @interface Person : NSObject //属性封装了

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

面向对象三大特性(封装/继承/多态)

引入:在面向对象思想中,有三大特性,封装  继承  多态. 思考:我们在使用类和对象实现编程的时候,到底是遵循这什么样的逻辑呢?为什么要这样规范类呢? 引入:面向对象很重要的思想就是隐藏,即外部不知道类内部是如何实现业务逻辑的,只管调用和使用结果,这个就是面向对象三大特性之一:  封装 1.封装[掌握] 定义:封装,字面意思就是将内容装到某个容器中,并进行密封保存,在面向对象思想中,封装指数据和对数据的操作捆绑到一起,形成 对外界的隐藏,同时对外提供可以操作的接口. 1.数据:即要操作的数据,在

封装继承多态到底讲的是什么

封装继承多态到底讲的是什么 封装.继承.多态并不是针对C#语言提出来的,他是一个在面向对象思想下产生的一个概念.所以想要弄明白封装.继承.多态,首先就要先了解面向对象概念. 封装:当我们提及面向对象的时候,这个对象怎么来?就是通过我们人为的封装得来.封装就是把一些特征或功能组合到一个抽象的对象上.就比如说电脑:它的特征是有一个显示屏,有一个主机,有鼠标和键盘等等.功能有计算等.那我们把这些特征和功能组合到“电脑”这个抽象的名词上时,“电脑”于是就有了这些特征和功能.但这个“电脑”不是实物,它代表

OC基础--继承

继承的基本概念: 现实生活中的继承: 人类是一个基类(也称做父类),通常情况下所有人类所共同具备的特性,如有手有脚能吃能喝 按照生活常规,我们继续给人类来细分的时候,我们可以分为学生类 工人类等,学生类和工人类同样具备手 脚 吃 喝等特性,而这些特性是所有人类所共有的,那么就可以让学生或工人类继承人类,这样当建立学生类和工人类的时候我们无需再定义人类中已经有的成员和方法,而只需要描述学生类和工人类所特有的特性即可. 学生类和工人类的特性是由在人类原有特性基础上增加而来的,那么学生类和工人类就是人

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

黑马程序员-OC面向对象继承关系和组合关系笔记

继承关系是描述类和类之间的关系,两个类分别称为子类和父类,子类继承了父类,子类就拥有了父类的属性和方法: 继承的关系特点描述出来就是:** "是" **  (例如:学生类 是 人类) 组合关系描述的语句是:**** "拥有" ***  (例如:学生有成绩这个属性,而成绩属性本来就是一个成绩类的对象 ) 继承示例代码: #import <Foundation/Foundation.h> //Animal类的声明 @interface Animal : NS