黑马程序员技术交流社区

标题: 继承 [打印本页]

作者: 王明耀    时间: 2015-8-12 22:04
标题: 继承
OC第四天 继承
OC中没有方法重载 但可以重写
static只能修饰局部变量和全局变量
super可以代表父类
self 谁访问当前方法 则self就代表谁
[对象  class]  获取当前对象的类
[类    class]  获取当前类
self->实例变量  可以访问当前类的实例变量
在类的内部访问实例变量不需要加public
子类可以继承父类的所有实例变量和方法(有的不能访问)
子类向上继承   父类向下派生
oc单继承     继承的合理性
重写   在子类中重新写父类已经存在的方法
子类不能定义和父类相同的实例变量
public      任意程序集
protected   只能在当前类和它的子类(不写系统默认)
private  同一类(当前类)
package   作用于框架级别
.m文件中定义的变量为私有的
@implementation Person
{
   int n; (n是私有的全局的实例变量)
}
@end
外部变量extern int n 要声明  才能用
私有的方法  .h内无声明  .m内定义
用%@打印对象  此时调用description方法

description 中不要使用%@  self(自身调用自身 且没有结束条件)
(description) 自定义输出信息
OC中没有继承  但是有协议
子类不能继承 私有方法(没声明  只在.m中实现)
多态  
  不同对象以自己的方式去响应相同的方法名的能力
  父类的指针指向子类对象(调用的是子类的方法)
多态条件: 1.有继承   2.有方法的重写
好处: 简化编程接口
注意: 1.调用父类中没有的方法(子类有)时编译时会报错
Animal *a =  [Animail new];
[(Dog *)a eat]; 运行的时候报错  编译没错
类型   :   编译的时候看左边
运行的时候看右边
类的本质是一个对象
类对象只能使用类方法  不能使用实例方法
获取类     Class c = [dog  class];     通过实例变量
           Class c = [Dog  class];     通过类名
Dog d = [c new]=[Dog new];

手动把test 包装成 SEL类型
SEL s = @selector(test);
[对象   performSelector:s1];

作者: WPeng    时间: 2015-8-12 22:52
写的很详细啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2