1.
new方法的作用:
创建并初始化对象,最后返回这个对象的地址。
new方法是定义在NSObject类中的
NSObject
让我们自定义的类具备创建对象的能力
NSObject类是所有类的基类
其中有一个属性是isa,所以每一个OC对象都有一个isa的属性
2.
当子类声明的属性和父类那里继承来的属性同名的时候,就算类型不同也会报错
super关键字:
要在子类的对象方法中调用从父类继承过来的对象方法,可以使用self来调用
如果你调用的方法真是从父类中继承过来的,建议使用super,可读性会提高
3.
@private 私有属性,只能在当前类中访问
注意:子类可以继承父类的@private修饰的属性,并且在子类外部也无法直接访问
@protected 受保护的,只能在当前类和当前类的子类中访问,但在类的外部仍然不能访问
@pubulic 公共的属性,在任何地方都可以访问
注意:如果想被外界访问,就封装成getter和setter
如果父类属性不希望被子类访问,那么就用@private
如果父类属性想给子类访问,但是别的地方不行,就用@protected
4.
访问修饰符只能修饰属性,不能修饰方法
5.
里氏替换原则LSP:
子类对象可以替换父类对象的位置,并且程序的功能不受影响
当一个父类指针指向了一个子类对象的时候,对程序没有任何影响,就是里氏替换原则
HMPerson *p1 = [HMStudent new];
局限性:当父类指针指向子类对象,并且调用了子类独有的方法时编译会报错
解决方法:调用方法的时候强转成子类类型的指针
6.
NSObject类型的指针是万能指针,它可以指向任何OC对象的地址
NSObject *obj = 10; // 错误写法
NSObject *obj = @“jack”;
如果一个数组元素类型是NSObject*类型的,那么这个数组就可以存储任意的OC对象
7.
重写会不会把父类的方法给覆盖啦???
既然重写啦,调用的就是重写后的方法
重写使用场景:
(1)子类对象想重新实现父类的方法
(2)父类的方法不能够满足子类的需求,此时需要先用super调用一次父类的方法,然后在加上自己的代码
特别注意:重写一般都写在实现的这个文件里
8.
多态:同一种行为,具有不同的表现形式
9.
用%@打印对象
HMPerson *p1 = [HMPerson new];
NSLog(@“%@”,p1);
输出:<HMPerson: 0x1005000a0>
[对象所属类名:对象地址]
解决方案:先调用 description方法,将其返回的字符串输出到控制台
HMPerson *p1 = [HMPerson new];
NSString *str = [p1 description];
NSLog(@“%@”,p1);
description方法的实现就是返回一个格式字符串
@“<对象所属的类名:对象的地址>”
重写description方法:
-(NSString *)description
{
return @“哈哈哈哈哈”
}
-(NSString *)description
{
return [NSSting stringWithFormat:@“姓名:%@ 年龄:%d”,_name,_age];
}
10.
对象调用对象方法的方式:
方式1> 创建对象,直接调用
HMPerson *p1 = [HMPerson new];
[p1 sayHi];
方式2>手动为对象发送SEL消息
HMPerson *p1 = [HMPerson new];
[p1 performSelector:@“selector(sayHi)”];
|
|