继承是面向对象中除了封装之后的第二大特性。继承使类之间可以不断的扩展,因此会有父类与子类的关系。子类继承自父类,可以从父类中继承属性和方法。下面我们来看一下。
(一)属性的继承。
(1)新建MyClass类,继承自NSObject类;再新建MySubClass类,继承自MyClass类。此时对于MySubClass来说,MyClass就是基类,也是父类,自己就是子类。在父类MyClass中声明一个属性。
@property(nonatomic,strong) NSString *className;//这里属性是可以被继承的;
(2)同时在main.m中进行实例化,发现不仅MyClass可以访问className这个属性,MySubClass也可以访问className这个属性。表示子类已经从父类中继承了该属性。
//父类
MyClass *myClass = [[MyClass alloc]init];
myClass.className = @"MyClass";
//子类
MySubClass *mySubClass = [[MySubClass alloc]init];
mySubClass.className = @"MySubClass";
(二)方法的继承
(1)在上一个例子的基础上,来实现下对象方法的继承,注意,在OC中方法是没有访问修饰符。在MyClass.h中声明一个方法:
-(void)report;
(2)去MyClass.m中实现该方法,只要打印出该类的类名即可。
-(void)report{
NSLog(@"ClassName = %@",_className);
}
(3)在main.m中分别用MyClass,MySubClass的对象调用该方法,发现都可以进行调用,所以可以知道对象方法是可以继承的。
//父类
MyClass *myClass = [[MyClass alloc]init];
myClass.className = @"MyClass";
[myClass report];
//子类
MySubClass *mySubClass = [[MySubClass alloc]init];
mySubClass.className = @"MySubClass";
[mySubClass report];
(4)结果输出:从结果中可以看出,子类从父类继承属性和方法后,基本上是相互独立的。子类对象可以对这些属性和方法进行访问和调用。
.
总结,如果一个方法在类中没有声明,只有实现,则表示该方法不能被外界调用,也不能被继承,就好像被私有化了一样。
github主页:https://github.com/chenyufeng1991 。欢迎大家访问!