黑马程序员技术交流社区
标题:
继承
[打印本页]
作者:
王明耀
时间:
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