oc20--继承2
// // Phone.h #import <Foundation/Foundation.h> // 被继承的这个类我们称之为父类/ 超类 @interface Phone : NSObject { int _cpu; } // 打电话 - (void)signalWithNumber:(NSString *)number; // 发短信 - (void)sendMessageWithNumber:(NSString *)number andContent:(NSString *)content; // 打印品牌信息 + (void)brand; @end
// // Phone.m #import "Phone.h" @implementation Phone - (void)signalWithNumber:(NSString *)number { NSLog(@"利用手机打电话给%@", number); } - (void)sendMessageWithNumber:(NSString *)number andContent:(NSString *)content { NSLog(@"利用手机发短信给%@, 内容是%@", number, content); } + (void)brand { NSLog(@"品牌"); } @end
// // Iphone.h #import <Foundation/Foundation.h> #import "Phone.h" @interface Iphone : Phone { // 注意: 在继承中方法可以重写, 但是属性(成员变量)不能重写 // int _cpu; } - (void)setCpu:(int)cpu; - (int)cpu; // 打电话 // 如果子类中有和父类中同名的方法, 那么我们称之为方法重写 // 注意: 继承中的方法调用顺序, 如果自己有就调用自己的, 如果自己没有就调用父类的 // 方法的调用顺序, 先自己再父类, 如果父类中没有再爷爷类, 如果爷爷类再没有就找爷爷的爸爸类 // 如果一直找到NSObject类都没有找到, 那么就会报错。// reason: '-[Iphone signalWithNumber:]: unrecognized selector sent to instance 0x1003043c0' //创建子类的时候,会依次创建他的父类以及祖先类的对象。 - (void)signalWithNumber:(NSString *)number; // 在继承中除了对象方法可以重写, 类方法也可以重写 + (void)brand; @end
// // Iphone.m #import "Iphone.h" @implementation Iphone - (void)setCpu:(int)cpu { _cpu = cpu; } - (int)cpu { return _cpu; } - (void)signalWithNumber:(NSString *)number { NSLog(@"利用 iphone 打电话给 %@", number); } + (void)brand { NSLog(@"iPhone手机"); } @end
// // Android.h #import <Foundation/Foundation.h> #import "Phone.h" // 继承了某个类的类我们称之为子类 @interface Android : Phone - (void)setCpu:(int)cpu; - (int)cpu; @end
// // Android.m #import "Android.h" @implementation Android - (void)setCpu:(int)cpu { _cpu = cpu; } - (int)cpu { return _cpu; } @end
// // main.m // 继承的其他特性 #import <Foundation/Foundation.h> #import "Iphone.h" int main(int argc, const char * argv[]) { Iphone *p = [Iphone new]; [p signalWithNumber:@"13456789"]; [Iphone brand]; /* 继承: 当B类继承A类, 那么B类就拥有A类所有的属性和方法(类方法/对象方法) 优点: 提高代码的复用性,可以让类与类之间产生关系, 正是因为继承让类与类之间产生了关系所以才有了多态 */ return 0; }