OC中继承子类对象调用方法机制 子类对象访问父类中的实例变量
2014-05-23 20:46
846 查看
在继承中,子类对象如何调用到正确方法的机制
每一个Objective - C对象都有一个隐藏的指针指向类的代码,当向一个对象发送消息的时候,当前的对象会首先在当前类里去查找相应的方法,如果找到的话,直接执行代码;若没有找到,则去父类里找对应的方法,如果找到的话,就会执行。如果找不到继续按照这样的原则,沿着继承链向上查找,直到根类NSObject(这个类是Objective - C所有类的根类),如果在这个NSObject类中仍找不到相应的方法,那么程序直接崩溃掉。
在继承的语法中,子类访问父类中的实例变量
创建一个新类的时候,其对象首先从自身的超类继承实例变量,然后添加自己的实例变量。在这种情况下,每一个子类对象的指针指向对象的最顶端。也就是沿继承链所包含的所有对象的最开始位置,这样编译就可以通过地址的偏移来计算所能访问到所有的超类的实例变量。
重写的概念
重写的概念,只存在于继承语法中。指的是:父类声明一个方法,但是父类并没有真正意义的去实现这个方法,而是在子类中真正的实现方法的功能,这种形式就叫做对这个方法的重写。(重写方法的目的是为了实现面向对象编程里的多态)。
如何在子类里面,直接调用父类方法或者父类的实例变量。
采用Super关键字,需要注意的是,super是一个关键字,不是参数,也不是实例变量,他只是编译器提供的一个功能,当你使用super的时候,编译器自然知道,你现在的目的只是访问父类的一些元素。(这里的super与self并不是一个概念:super是一个实实在在存在的一个关键字,而self只是一种调用机制,并不是关键字)
NSLog调用%@的机制
当使用NSLog格式化参数是%@的时候,实际上失去调用打印对象的description方法,这个方法返回什么值,打印结果就是什么值。(在NSLog这个对象调用时,默认的是打印出我们定义的对象的地址)
每一个Objective - C对象都有一个隐藏的指针指向类的代码,当向一个对象发送消息的时候,当前的对象会首先在当前类里去查找相应的方法,如果找到的话,直接执行代码;若没有找到,则去父类里找对应的方法,如果找到的话,就会执行。如果找不到继续按照这样的原则,沿着继承链向上查找,直到根类NSObject(这个类是Objective - C所有类的根类),如果在这个NSObject类中仍找不到相应的方法,那么程序直接崩溃掉。
在继承的语法中,子类访问父类中的实例变量
创建一个新类的时候,其对象首先从自身的超类继承实例变量,然后添加自己的实例变量。在这种情况下,每一个子类对象的指针指向对象的最顶端。也就是沿继承链所包含的所有对象的最开始位置,这样编译就可以通过地址的偏移来计算所能访问到所有的超类的实例变量。
重写的概念
重写的概念,只存在于继承语法中。指的是:父类声明一个方法,但是父类并没有真正意义的去实现这个方法,而是在子类中真正的实现方法的功能,这种形式就叫做对这个方法的重写。(重写方法的目的是为了实现面向对象编程里的多态)。
如何在子类里面,直接调用父类方法或者父类的实例变量。
采用Super关键字,需要注意的是,super是一个关键字,不是参数,也不是实例变量,他只是编译器提供的一个功能,当你使用super的时候,编译器自然知道,你现在的目的只是访问父类的一些元素。(这里的super与self并不是一个概念:super是一个实实在在存在的一个关键字,而self只是一种调用机制,并不是关键字)
NSLog调用%@的机制
当使用NSLog格式化参数是%@的时候,实际上失去调用打印对象的description方法,这个方法返回什么值,打印结果就是什么值。(在NSLog这个对象调用时,默认的是打印出我们定义的对象的地址)
相关文章推荐
- OC中继承子类对象调用方法机制 子类对象访问父类中的实例变量
- OC 继承子类对象调用方法机制 子类对象访问父类中的实例变量
- java 父类访问子类对象的实例变量 继承过程中的执行顺序
- Java对象初始化步骤&&子类继承父类后变量与方法调用情况
- 2018/01/08JAVA 基础 / 接口与继承/Java关键词:变量引用 super 调用父类对象方法/构造方法【或者访问父类对象属性】的方式归纳
- 子类继承父类时,子类与父类有同名变量,当使用子类对象调用父类方法使用同名变量,这个变量是子类的,还是父类的?(转)
- 2018/01/08JAVA 基础 / 接口与继承:调用父类/子类的类方法、对象方法,访问父类的类属性、对象属性的方式汇总
- Java继承关系中,父类方法使用实例变量和调用实例方法的探究
- php基础 继承_子类中如何调用父类的变量和方法
- 子类与父类实例变量,静态方法调用
- 子类继承父类时,创建对象,构造方法的调用问题
- java 程序加载过程---3--类中申明同时申明类的静态对象 创建类的实例 访问类的静态变量 调用类的静态方法 使用反射方法 初始化类的子类对象 直接使用java.exe 调用某个类
- JavaSE第六十四讲:使用反射机制调用对象的私有方法、访问对象的私有成员变量
- OC基础day4-继承,self,super,多态,类对象,SEL类型,description,私有方法与私有变量,三种访问限制
- Java多态 实例子类自动调用父类为空的构造方法 成员变量不支持Override 可写,没多态效果
- OC 对象调用属性或实例变量或方法的细节。
- Java 中子类是否只继承父类的非私有变量和方法?
- 子类和父类中方法和变量访问权限
- Java 中子类是否只继承父类的非私有变量和方法?
- Java基础之父类与子类之间变量和方法的调用