一、封装
1.什么是封装?
形象地说就是将方法在类内进行实现的过程。
2.成员变量访问修饰符问题(方法是没有访问修饰符,用法和c语言一致):
@public:在类内、类外都可以使用,并且都可以被继承
例:在 .h文件中声明一个public类型的成员变量:
@public
int _classInt;
在main.m中进行使用,注意此时只能用指向来调用类中的成员变量,如下:
myClass *mc = [[myClass alloc]init];
mc -> _classInt = 1001;
温馨提示:我们声明的属性默认为protected类型的,并且在类外是可以进行调用,但这并不能说是把属性转化成了public类型。是因为我们这里面有set和get方法。
@private:在类内可以使用,但是在类外无法被调用,并且不可以被继承。
@protected:(默认情况下就是该类型)在类内可以使用,类外无法被调用,但是可以被继承。
@package:在框架内相当于受保护,在框架外相当于私有。
二、继承
注意:oc中没有多继承,如要实现多继承的效果,则需要使用oc中“协议”。
我们平常所建的类(父类)都是继承NSObject,我们称之为“基类”,其中的:冒号代表继承关系。
子类可以调用父类的方法(但是如果父类的方法没有在.h中没有进行声明,则子类无法进行继承)。
子类可以调用父类的成员变量(但是要成员变量的调用是由成员变量的访问修饰符种类决定)。
三、多态
1.什么是多态?
将方法重写使其有多种状态,称为多态。而方法重写和方法重载是多态的必要手段(但oc中不支持方法重载,只有方法重写)。
2.什么是方法重写?什么是方法重载?
方法的重写:同样的方法名、同样的返回值、同样的参数。
方法的重载:同样的方法名,但是是不同的返回值及参数(包括参数个数和参数类型)。
3.在子类中进行方法重写后,但还是调用父类的方法,应该如何实现?
在子类中,对方法重写时,添加一句:
【super 方法名
】
注意:
1.【self 方法名】是表示调用当前类方法,如果在方法重写中错写成【self 方法名】,则会造成死循环,或者直接崩溃掉。
2.父类的变量可以接收子类的对象,
如:Printer *printer = 【【BlackPrinter alloc】init】;
【printer print】;
其中,Printer是父类,BlackPrinter是子类。