在继承中,子类对象如何调用到正确方法的机制

每一个Objective - C对象都有一个隐藏的指针指向类的代码,当向一个对象发送消息的时候,当前的对象会首先在当前类里去查找相应的方法,如果找到的话,直接执行代码;若没有找到,则去父类里找对应的方法,如果找到的话,就会执行。如果找不到继续按照这样的原则,沿着继承链向上查找,直到根类NSObject(这个类是Objective - C所有类的根类),如果在这个NSObject类中仍找不到相应的方法,那么程序直接崩溃掉。

在继承的语法中,子类访问父类中的实例变量

创建一个新类的时候,其对象首先从自身的超类继承实例变量(父类一定要设置  设值,取值方法),然后添加自己的实例变量。在这种情况下,每一个子类对象的指针指向对象的最顶端。也就是沿继承链所包含的所有对象的最开始位置,这样编译就可以通过地址的偏移来计算所能访问到所有的超类的实例变量。

重写的概念

重写的概念,只存在于继承语法中。指的是:父类声明一个方法,但是父类并没有真正意义的去实现这个方法,而是在子类中真正的实现方法的功能,这种形式就叫做对这个方法的重写。(重写方法的目的是为了实现面向对象编程里的多态)。

如何在子类里面,直接调用父类方法或者父类的属性。

@property 定义的属性 采用Super关键字,需要注意的是,super是一个关键字,不是参数,也不是实例变量,他只是编译器提供的一个功能,当你使用super的时候,编译器自然知道,你现在的目的只是访问父类的一些元素。(这里的super与self并不是一个概念:super是一个实实在在存在的一个关键字,而self只是一种调用机制,并不是关键字)

NSLog调用%@的机制

当使用NSLog格式化参数是%@的时候,实际上失去调用打印对象的description方法,这个方法返回什么值,打印结果就是什么值。(在NSLog这个对象调用时,默认的是打印出我们定义的对象的地址)

OC 继承子类对象调用方法机制 子类对象访问父类中的实例变量的更多相关文章

  1. 牛客网Java刷题知识点之父类中的私有内容,子类是否具备? 子类不可直接,但可间接访问父类中的私有内容?

    不多说,直接上干货!  父类中的私有内容,子类是否具备? 答:不具备 子类不可直接,但可间接访问父类中的私有内容 这样情况,开发中不所见,但是,面试的时候,必考非常常见.

  2. 继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类。 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法。 (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承。 (4)子类中定义的成员方法,并且这个方法的名字返回类型,以及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。 分析以上程

    继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法.(3)子类中定义的成员变量和父类中定义的 ...

  3. tp 框架 利用反射实现对象调用方法

    <?php class Person{ public $name="xiaoming"; function say(){ echo "i am ".$th ...

  4. 42th 逻辑的连续性 取决于 细节的理解-------------我是个厨子:类的调用vs 对象调用方法

    类的调用vs 对象调用方法   class Cook5:    '''这是一个厨师的类'''        # 类是一系列对象相同的特征与技能的结合体        # 用变量表示特征(属性)    ...

  5. 子类覆写的变量被private隐藏,强制转换方式通过子类访问父类的被覆写变量:

    import static java.lang.System.*; public class SuperParent{ public static void main(String[] args){ ...

  6. iOS js oc相互调用(JavaScriptCore)---js调用iOS --js里面通过对象调用方法

    下来我们看第二种情况 就是js 中是通过一个对象来调用方法的. 此处稍微复杂一点我们需要使用到 JSExport 凡事添加了JSExport协议的协议,所规定的方法,变量等 就会对js开放,我们可以通 ...

  7. php 对象调用方法

    static union _zend_function *zend_std_get_method(zval **object_ptr, char *method_name, int method_le ...

  8. 子类可以有跟父类中同名的方法,但是会重写父类中的方法,甚至是root class中的方法

    /* 子类可以重写父类中的方法,甚至是root class中的方法,比如NSObeject 的new方法,但是后提示警告如下 Method is expected to return an insta ...

  9. 记一则 Lambda内递归调用方法将集合对象转换成树形结构

    public dynamic GetDepartments(string labID) { List<int> usedIDs = new List<int>(); //缓存已 ...

随机推荐

  1. 【CSS】最全的CSS浏览器兼容问题

    CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理方法并 整理了一下.对于web2.0的过度,请尽量用xhtml ...

  2. VBA中操作XML

    OFFICE2007之后使用了OpenXml标准(伟大的改变),定制文本级的Ribbon可以通过修改压缩包内的xml文件来实现. 先学习一下VBA中操作XML的方法 先引用Microsoft XML ...

  3. [SAP ABAP开发技术总结]OK_CODE

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. 模仿$.Callbacks实现

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. 关于deferred

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. iOS - OC NSKeyedArchiver 数据归档

    前言 @interface NSKeyedArchiver : NSCoder @interface NSKeyedUnarchiver : NSCoder 在 OC 语言中,归档是一个过程,即用某种 ...

  7. iOS - UIDevice

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIDevice : NSObject @available(iOS 2.0, *) public class UI ...

  8. facebook 开源文件传输 lib

    https://github.com/facebook/wdt WDT is an embeddedable library (and command line tool) aiming to tra ...

  9. AJAX的简介

    AJAX 指异步JavaScript及XML(Asynchronous JavaScript And XML(异步JavaScript和XML)),是指一种创建交互式网页应用的网页开发技术. 国内通常 ...

  10. for循环与for in循环

    json是js里的一种数据格式.var obj={a:15,b:8,c:12} json数组对象 var arr=[15,8,12]; 数组alert(obj.a); ---15alert(obj[' ...