oc继承

转载 2015年11月17日 18:23:43


博客分类: 

类的继承是oop中的基本原则,下面就来分析一下oc的类和继承

   在实现继承出现了子类的.m文件报错 mission@end 导致程序没发编译,最后发现是.h中少了一个@end 

 

父类    TestExtends.h文件

Oc代码  收藏代码
  1. @interface TestExtends: NSObject{  
  2.       
  3. NSString* name;  
  4.       
  5. }  
  6. @property NSString *name; //类似set和get方法  
  7.   
  8. //@property name;  
  9.   
  10.   
  11. -(void)setName:(NSString*)newName;//定义方法  
  12.   
  13. -(id)initWithC:(NSString*)newName;//定义构造方法  
  14.   
  15.   
  16. @end  
  17.   
  18. #endif /* TestExtends_h */  

TestExtends.m文件

伦理片 http://www.dotdy.com/

Oc代码  收藏代码

  1. #import <Foundation/Foundation.h>  
  2. #import "TestExtends.h"  
  3.   
  4. @implementation TestExtends  
  5.   
  6. @synthesize name;  
  7.   
  8. -(void)setName:(NSString*)newName{  
  9.   
  10.     NSLog(@"调用父类的setName方法");  
  11.   
  12. }  
  13.   
  14. -(id)initWithC:(NSString *)newName{  
  15.     if (self==[super init]) {  
  16.         name=newName;//  
  17.         NSLog(@"父类的构造方法被调用。。。。");  
  18.     }  
  19.   
  20.     return self;  
  21. }  
  22.   
  23. @end  

 

mian文件

Oc代码  收藏代码
  1. TestExtends* te=[[TestExtends alloc] init];  
  2.        [te setName:@"Object-c"];  
  3.        NSLog(@"简单的实现");   

 

运行结果:

2015-11-04 22:35:10.327 test_01[1287:67105] 调用父类的setName方法

2015-11-04 22:35:10.328 test_01[1287:67105] 简单的实现

 

(lldb) 

 

分析

创建对象

 

   TestExtends* te=[[TestExtends alloc] init];

调用setName方法

        [te setName:@"Object-c"];

 

        NSLog(@"简单的实现");

 

 

子类  定义Person类继承TestExtends类

 

TestExtends.h文件

Oc代码  收藏代码
  1. #import "TestExtends.h"  
  2.   
  3. @interface Person :TestExtends  
  4.   
  5. @property NSString* address;//定义变量  
  6.   
  7. -(void)setAddress:(NSString*)newAssress;//定义方法  
  8.   
  9. -(id)initWithChild:(NSString*)newAssress;//定义构造函数的方法  
  10.   
  11. @end  
  12.   
  13.   
  14. #endif /* Person_h */  

 

TestExtends.m文件

 

Oc代码  收藏代码
  1. #import "Person.h"  
  2.   
  3. @implementation Person  
  4.   
  5. @synthesize address;  
  6.   
  7.   
  8. -(void)setAddress:(NSString *)newAssress{  
  9.   
  10.     [super setName:newAssress];  
  11.       
  12.     NSLog(@"子类的地址是%@",newAssress);  
  13. }  
  14.   
  15. -(id)initWithChild:(NSString *)newAssress{  
  16.   
  17.       
  18.     if (self==[super initWithC:newAssress]) {  
  19.   
  20.         address=newAssress;  
  21.         NSLog(@"子类的构造函数被调用了。。。");  
  22.     }  
  23.     return self;  
  24. }  
  25.   
  26.   
  27. @end  

 

main文件

Java代码  收藏代码
  1. Person* tec=[[Person alloc]initWithChild:@"Android"];  
  2.     [tec setAddress:@"China"];  
  3.       

运行结果:

Oc代码  收藏代码
  1. 2015-11-04 22:40:42.288 test_01[1306:70521] 父类的构造方法被调用。。。。  
  2. 2015-11-04 22:40:42.289 test_01[1306:70521] 子类的构造函数被调用了。。。  
  3. 2015-11-04 22:40:42.289 test_01[1306:70521] 调用父类的setName方法  
  4. 2015-11-04 22:40:42.289 test_01[1306:70521] 子类的地址是China  
  5. (lldb)   

分析:

  1,  Person* tec=[[Person alloc]initWithChild:@"Android"];创建对象首先调用父类的方法:原因如下

Java代码  收藏代码
  1. -(id)initWithChild:(NSString *)newAssress{  
  2.   
  3.       
  4.     if (self==[super initWithC:newAssress]) {//调用父类的构造方法  
  5.   
  6.         address=newAssress;  
  7.         NSLog(@"子类的构造函数被调用了。。。");  
  8.     }  
  9.     return self;  
  10. }  

 

  

2, [tec setAddress:@"China"];方法中存在 [supersetName:newAssress];调用父类的方法

 

 影音先锋电影 http://www.iskdy.com/

 

将mian文件中的  Person* tec=[[Personalloc]initWithChild:@"Android"];

        [tec setAddress:@"China"];

 

改为  TestExtends* te=[[Person allocinit];

        [te setName:@"nihao"];

 

运行结果:



OC学习篇之---类的三大特性(封装,继承,多态)

之前的一片文章介绍了OC中类的初始化方法和点语法的使用:http://blog.csdn.net/jiangwei0910410003/article/details/41683873,今天来继续学习...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年12月04日 22:20
  • 30827

OC语言之封装,继承,多态

# 封装 ##1.面向对象三大特性 - 封装性 - 继承性 - 多态性 --- ##2.什么是封装 - 封装性就是隐藏实现细节,,仅对外公开接口。 ![](http://7xj0kx.com1.z0....
  • u012938194
  • u012938194
  • 2016年02月06日 15:50
  • 1276

Objective-C 【继承、变量修饰符(私有变量/方法)、description方法】

——————————————————————————————————————————— 继承 一段代码: #import @interface Animal : NSObject {     ...
  • Felicity294250051
  • Felicity294250051
  • 2015年08月22日 22:20
  • 1371

OC代码10_继承

  • 2015年06月02日 15:02
  • 430B
  • 下载

OC封装继承多态演示

  • 2017年04月07日 21:49
  • 26KB
  • 下载

OC代码13_继承_殴打小动物

  • 2015年06月02日 14:09
  • 424B
  • 下载

OC代码12_继承

  • 2015年06月02日 14:11
  • 426B
  • 下载

OC代码11_继承

  • 2015年06月02日 14:59
  • 428B
  • 下载

黑马程序员——OC面向对象三大特性——封装,继承,多态。

一.封装: 不使用@public set方法: 命名规范:方法名以set开头;setAge首字母大写;返回值一定是void;一定要接收一个和成员变量类型一样的参数;形参和成员变量名要...
  • DLonion
  • DLonion
  • 2014年06月21日 21:39
  • 394

iOS OC03_继承,便利构造器,初始化方法

// //  Zombie.h //  OC03_继承,便利构造器,初始化方法 // //  Created by dllo on 15/7/16. //  Copyright (c) 20...
  • cheng_xiansheng
  • cheng_xiansheng
  • 2015年07月20日 16:32
  • 658
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oc继承
举报原因:
原因补充:

(最多只允许输入30个字)