首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

self和super的区别

(1)self调用自己方法,super调用父类方法      (2)self是类,super是预编译指令      (3)[self class]和[super class]输出是一样的     ...①当使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;而当使用 super 时,则从父类的方法列表中开始找,然后调用父类的这个方法。...;      }; 当编译器遇到[super setName:]时,开始做这几个事:      1)构建 objc_super 的结构体,此时这个结构体的第一个成员变量 receiver 就是子类,和...而第二个成员变量 superClass 就是指父类 调用 objc_msgSendSuper 的方法,将这个结构体和 setName 的 sel 传递过去。     ...2)函数里面在做的事情类似这样:从 objc_super 结构体指向的 superClass 的方法列表开始找 setName 的 selector,找到后再以 objc_super->receiver

1.3K110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++】继承 ⑩ ( 继承机制中的 static 静态成员 | 子类中访问父类静态成员的方法 )

    派生类 ) 共享 ; 2、父类静态成员访问控制权限的改变 继承自 父类的 静态成员变量 , 仍然遵循 继承中 子类的 访问控制特性 , public 公有继承 : 父类成员 在 子类 中 , 访问控制权限...不变 , 共有 和 保护成员 可以在子类访问 , 私有成员不可在子类中访问 ; 父类中的 public 成员 仍然是 public 成员 ; 父类中的 protected 成员 仍然是 protected...成员 ; 父类中的 private 成员 仍然是 private 成员 ; protected 保护继承 : 父类成员 在 子类 中 , 访问控制权限 变为 protected , 基类的 公有成员...和 保护成员 可以在子类访问 , 私有成员不可在子类中访问 ; 父类中的 public 成员 变为 子类中的 protected 成员 ; 父类中的 protected 成员 仍然是 protected...成员 ; 父类中的 private 成员 仍然是 private 成员 ; private 私有继承 : 父类成员 在 子类 中 , 所有成员的访问控制权限 变为 private , 基类的 所有成员

    54910

    【C++】继承 ④ ( 继承对访问控制权限的影响 | 访问权限判定 | 继承不包括构造与析构函数 | 继承改变成员访问权限 )

    一、继承相关概念 1、继承不包括构造与析构函数 子类 继承 父类 的 所有成员 , 包括 成员变量 和 成员方法 ; 子类 不会 继承 父类 的 构造函数 和 析构函数 ; 2、继承改变成员访问权限 父类..., 就像公共场所一样 ; 保护成员 protected : 保护成员可以被该类和所有派生子类访问 , 但不能被类的外部访问 ; 半开放 : 只有 在类内部 和 派生类 的成员可以访问它 ; 私有成员...private : 私有成员 只能被该类的成员函数访问 , 包括友元函数和派生类中的覆盖函数 ; 完全封闭 : 在 类的外部 和 子类 中都不能访问私有成员 ; private 是最安全的访问控制级别...---- 1、访问权限判定 C++ 的 继承方式 对 子类的 成员变量 和 成员方法 会造成影响 , 成员的访问属性 需要看根据下面的逻辑进行判定 : 调用位置 : 看是在哪调用的 , 在 类内部 ,...; // 子类 私有继承 父类 class Child : private Parent 父类成员 在 子类 中 , 公有成员 和 保护成员 变为 私有成员 ; 父类中的访问控制权限 如下变化 : 父类中的

    30710

    super关键字和继承中的潜规则

    首先来看一个莫名其妙出场率很高的题目,重载和重写。 重载和重写 方法的重载,是在同一个类中,名称相同,参数不同的方法。而重写则是子类继承父类以后,在子类中写了一个和父类方法同名的方法。...其实我们是可以在子类中通过super关键字来调用父类被覆盖的方法的。 super关键字调用 super和this 看了上面的例子,是不是联想到我们曾经学过的this,他们确实有点像,但是也有区别。...this调用自己类中的构造器,而super可以调用父类中的构造器。 super除了调用被子类重写后被隐藏的成员变量和方法,还有一个重要的作用就是调用父类构造器。...子类构造时,会调用父类构造器,使用super则指定调用哪一个父类的构造器,如果不使用则默认调用父类的无参构造器。...在创建子类对象的时候,并没有创建父类对象,但是由于子类继承了父类,内存中不但会划分子类的变量空间,也会将子类的所有父类的成员变量也划分内存空间,所以可以使用super去访问他们。

    51230

    静态变量和成员变量的区别 && 成员变量和局部变量的区别

    ============================================================================= 1)静态变量和成员变量的区别: (1):所属不同...(3):生命周期不同:     静态变量:静态变量是随着类的加载而加载,随着类的消失而消失。     成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失。...============================================================================= 2)成员变量和局部变量的区别: (1)在类中的位置不同...(5)注意事项:     1.局部变量名称可以和成员变量名称一样,但是在方法中使用该变量的时候,采用的是就近原则(即先找小范围,再找大范围)。     ...2.局部变量前不能放置任何访问修饰符 (private,public和protected)。final可以用来修饰局部变量。被final修饰的局部变量变为常量了。

    1.6K20

    python类中super()和__init__()的区别

    目录[-] 单继承时super()和init()实现的功能是类似的 class Base(object): def __init__(self): print 'Base create...super()继承时不用显式引用基类。...__init__() TypeError: must be type, not classobj super不是父类,而是继承顺序的下一个类 在多重继承时会涉及继承顺序,super()相当于返回继承顺序的下一个类...()方法可以看出,super()的第一个参数可以是继承链中任意一个类的名字, 如果是本身就会依次继承下一个类; 如果是继承链里之前的类便会无限递归下去; 如果是继承链里之后的类便会忽略继承链汇总本身和传入类之间的类...如果childA基础Base, childB继承childA和Base,如果childB需要调用Base的init()方法时,就会导致init()被执行两次: class Base(object):

    96960

    C++接口继承与实现继承的区别和选择

    1.接口继承与实现继承的区别 《Effective C++》条款三十四:区分接口继承和实现继承中介绍的比较啰嗦,概括地说需要理解三点: (1)纯虚函数只提供接口继承,但可以被实现; (2)虚函数既提供接口继承...这里假定讨论的成员函数都是public的。...圆和椭圆有着自己的绘制方式,所以各自有独自的绘制实现。 对于CShape::setColor,将其设置为普通的虚函数,提供一个默认的实现,这样圆和椭圆既可以重新定义,也可以使用基类的默认实现。...2.接口继承与实现继承的选择 类设计时,接口继承与实现继承相互独立,代表着一定的设计意义,在二者之间进行选择时,我们需要考虑一个因素:对于无法提供默认版本的函数接口选择函数接口继承,对于能够提供默认版本的函数接口...---- 参考文献 [1]读书笔记Effective_C++条款三十四:区分接口继承和实现继承 [2]李健.编写高质量代码:改善C++程序的150个建议[M].第一版.北京:机械工业出版社,2012.1

    1.3K20

    成员变量和局部变量的区别是什么_实例变量和成员变量的区别

    大家好,又见面了,我是你们的朋友全栈君。 成员变量和局部变量的区别?...A:在类中的位置不同 成员变量:在类中方法外 局部变量:在方法定义中或者方法声明上 B:在内存中的位置不同 成员变量:在堆内存 局部变量:在栈内存 C:生命周期不同 成员变量:随着对象的创建而存在...注意事项: 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。...public static void main(String[] args) { Varialbe v = new Varialbe(); System.out.println(v.num); //访问成员变量...v.show(); } } 定义在方法以外的是成员变量 在方法内的是局部变量 成员变量可以增加作用域 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    86830

    read_only和super_read_only参数的区别

    read_only和super_read_only参数的区别?...在MySQL中,从库经常会被设置成为read_only属性,来防止数据的写入,在开启gtid的情况下,如果我们看到从库上面有多个GTID值,然后其中一个GTID的uuid和从库的uuid一致,那就可以判断...,这个从库曾经出现过写入,可能需要校验从库和主库的数据一致性。...类似read_only参数,还有一个super_read_only的参数,这两个参数之间有些细微的关系,今天在这里罗列一下: 1、read_only参数和super_read_only参数默认都是关闭的...d、插入系统日志表的操作是允许的,例如mysql.general_log和mysql.slow_log 5、如果我们设置super_read_only为on,不仅拥有super权限的账号不能进行更新,

    4.5K50

    成员访问符号(.和-)的详解c语言版:

    成员访问符号(.和->)的详解: 一、成员访问符 成员访问符通常是指:用于访问结构体、类或对象的成员(属性或方法)的符号。 操作符名称: 点号(.)...箭头符号(->) 双冒号(::) 在大多数编程语言中都使用点号来访问结构体、类或对象的成员。 在C和C++中,当通过指针访问结构体或类的成员时,需要使用箭头符号来代替点号。...一般用于C++中,在C++中,一般用于访问命名空间中的成员,也可以用于访问静态成员和嵌套的类。 在C语言中,我们主要使用前两种操作符,对于第三种我们在本文中不进行深入展开。...二、点号操纵符(.)和箭头操作符(->)的区别 点号(.)...三、总结 对于这两种成员访问符,各自有各自的使用范围 访问方式 对应的访问符 结构体变量直接访问成员变量 点号操作符 通过指针(即结构体的地址)来访问成员变量 能使用箭头(->)操作符 通过指针进行解引用

    29310

    extends T 和 ? super T 的区别和用法

    点击上方“挨踢小子”,“选择关注”或者“设置星标” 优质文章第一时间送达!...这里我们先定义一组有继承关系的类: //子类-->父类 小红苹果--红苹果--苹果--水果--好吃的--吃的 这些类都是左侧的类为与它相连接的右侧的类的子类....那么 代表的是左侧小红苹果,红苹果和苹果的类中的某个类,而代表的就是苹果和水果,好吃的,吃的,的类中的某个类. 这里要注意的是或是代表的是范围内的某个特定的类,而不是范围内的所有类....,我们完全可以继续定义个小小红苹果来继承小红苹果,这个继承是没有下限的.这个反推出一个结论是一个有上限T的类型.那么我们马上就发现实际上是有下限T的类型....super 苹果> list = new ArrayList(); list.add(苹果); //无任何问题 List<?

    1.1K20
    领券