OC基础 类的三大特性
OC基础 类的三大特性
OC的类和JAVA一样,都有三大特性:继承,封装,多态,那么我们就来看一下OC中类的三大特性。
1.继承
继承的特点:
(1)子类从父类继承了属性和方法。
(2)子类独有的属性和方法不能被父类使用。
(3)子类独有的属性和方法,不能够在子类之间互相使用。
(4)子类能够重写父类的方法,子类调用该方法时:首先调用子类的方法,如果子类没有该方法,就调用父类的该方法。
(5)子类对象指针可以转换成父类对象指针,但是父类对象指针不能够转换成子类对象指针。
三种权限变量的继承:
(1)public和protected修饰的变量可以被子类继承。
(2)private修饰的变量不可以被子类继承。
(3)继承的属性,如果要在子类里面修改,只能使用 "self.属性名",不能使用 "_属性名"
例子:
Father类,Father.h文件:
#import <Foundation/Foundation.h> @interface Father : NSObject @property (nonatomic,strong) NSString *name; @property (nonatomic) int age; -(id)initWithName:(NSString *)name andAge:(int)age; -(void)speakChinese; -(void)printf; @end
Father.m文件:
#import "Father.h" @implementation Father -(id)initWithName:(NSString *)name andAge:(int)age
{
self = [super init];
if(self)
{
_name = name;
self.age = age;
}
return self;
} -(void)speakChinese
{
NSLog(@"我会说中文");
} -(void)printf
{
NSLog(@"我叫%@,我%d岁",_name,_age);
} @end
Son1类,Son1.h文件:
#import "Father.h" @interface Son1 : Father @property (nonatomic) int score; -(void)speakEnglish; @end
Son1.m文件:
#import "Son1.h" @implementation Son1 -(void)speakEnglish
{
NSLog(@"我会说英文");
} -(void)printf
{
NSLog(@"%@,%d,%d",self.name,self.age,self.score);
} @end
Son2类,Son2.h文件:
#import "Father.h" @interface Son2 : Father @property (nonatomic) int money; -(void)speakFrench; @end
Son2.m文件:
#import "Son2.h" @implementation Son2 -(void)speakFrench
{
NSLog(@"我会说法语,我很屌!");
} @end
main.m中使用:
#import <Foundation/Foundation.h>
#import "Son1.h"
#import "Father.h"
#import "Son2.h" int main(int argc, const char * argv[])
{ @autoreleasepool { // insert code here... Father *fa = [[Father alloc] initWithName:@"王老大" andAge:];
NSLog(@"%@%d",fa.name,fa.age); [fa speakChinese];
[fa printf]; Son1 *son1 = [[Son1 alloc] initWithName:@"王小三" andAge:];
NSLog(@"%@%d,%d",son1.name,son1.age,son1.score); [son1 speakChinese];
[son1 speakEnglish];
[son1 printf]; Son2 *son2 = [[Son2 alloc] initWithName:@"王小二" andAge:]; [son2 speakChinese];
[son2 speakFrench];
[son2 printf]; Father *fa2 = (Father *)son1;
[fa2 speakChinese]; Son1 *son11 = (Son1 *)fa;
[son11 speakEnglish]; }
return ;
}
2.封装
封装:隐藏内部实现,稳定外部接口。
封装就是定义类,定义属性和定义方法。
然而类封装了实例变量和方法,属性则是封装的setter和getter方法
那么封装带来的好处:让我们使用更加简单 ,变量更加安全 ,并且可以隐藏内部实现细节 ,充分的提升了开发速度。
例子:
Student类,Student.h文件:
#import <Foundation/Foundation.h> @interface Student : NSObject
{
NSString *_name;
NSString *_nickName;
} //@property定义属性
//1,它给该类声明了一个属性名+下划线的变量
//2,它给该类声明了一个getter方法和一个setter方法 //修饰符
//atomic和nonatomic
//原子性和非原子性,atomic线程安全,nonatomic线程不安全
//一般情况下使用nonatomic //setter修饰符指定赋值时调用哪个方法来实现setter
//setter修饰符指定读取值时调用哪个方法来实现getter
@property (nonatomic,setter = setNickName:,getter = nickName) NSString *nickName; //修饰符
//assign用来修饰基本类的
//strong或者retain是用来修饰对象指针的
//readonly只读:只声明和实现getter,不声明和实现setter方法
//readwrite可读写:声明和实现了getter和setter,默认就是readwrite
@property (assign,readonly) int age;
@property (retain,readwrite) NSString *secondName; -(void)setName:(NSString *)name;
-(NSString *)getName;
-(void)setaaa:(NSString *)aaa; @end
3.多态
多态性(polymorphism):允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说:允许将子类类型的指针赋值给父类类型的指针。
不同对象对同一消息的不同响应,子类可以重写父类的方法,多态就是允许方法重名,参数或返回值可以是父类型传入或返回。
多态的特点:
(1)父类类型的指针指向子类对象。
(2)如果函数方法参数中使用的是父类类型,则可以传入父类和子类对象,而不用再去定义多个函数来和相应的类进行匹配了。
(3)父类类型的变量不能直接调用子类特有的方法,如果必须要调用,则必须强制转换为子类特有的方法。
例子:
Animal类,Animal.h文件:
#import <Foundation/Foundation.h> @interface Animal : NSObject - (void)name; @end
Animal.m文件:
#import "Animal.h"
@implementation Animal
- (void)name {
NSLog(@"动物");
}
@end
Cat继承Animal,Cat.h文件:
#import "Animal.h" @interface Cat : Animal - (void)name; @end
Cat.m文件:
#import "Cat.h" @implementation Cat //重写方法
- (void)name {
NSLog(@"猫");
} @end
main.m中使用:
#import <Foundation/Foundation.h>
#import "Animal.h"
#import "Cat.h" int main(int argc, const char * argv[])
{ @autoreleasepool { Animal *animal = [[Animal alloc] init];
[animal name]; Cat *cat1 = [[Cat alloc] init];
[cat1 name]; //这里会体现多态的用法:动态监控调用哪个方法
Animal *cat2= [[Cat alloc] init];
[cat2 name]; }
return ;
}
OC基础 类的三大特性的更多相关文章
- (转载)OC学习篇之---类的三大特性:封装,继承,多态
之前的一片文章介绍了OC中类的初始化方法和点语法的使用,今天来继续学习OC中的类的三大特性,我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今 ...
- OC学习篇之---类的三大特性(封装,继承,多态)
之前的一片文章介绍了OC中类的初始化方法和点语法的使用:http://blog.csdn.net/jiangwei0910410003/article/details/41683873,今天来继续学习 ...
- 转 OC温故:类的三大特性(封装,继承,多态)
原文标题:OC学习篇之---类的三大特性(封装,继承,多态) 我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性 ...
- [.net 面向对象编程基础] (11) 面向对象三大特性——封装
[.net 面向对象编程基础] (11) 面向对象三大特性——封装 我们的课题是面向对象编程,前面主要介绍了面向对象的基础知识,而从这里开始才是面向对象的核心部分,即 面向对象的三大特性:封装.继承. ...
- [.net 面向对象编程基础] (12) 面向对象三大特性——继承
[.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...
- [.net 面向对象编程基础] (13) 面向对象三大特性——多态
[.net 面向对象编程基础] (13) 面向对象三大特性——多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...
- Java基础-面向对象第三大特性之多态(polymorphism)
Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...
- 第9章 Java类的三大特性之一:继承
1.什么是继承 子类继承父类就是对父类的扩展,继承时会自动拥有父类所拥有的处private之外的所有成员作用:增加代码复用语法格式: class 子类名 extends 父类名{…………}第9章 Ja ...
- Python 类的三大特性的综合运用 案例
# --------------------- 类的三大特性的综合运用 案例 ------------------------- # 定义三个类:小狗,小猫,人 # 小狗:姓名,年龄(默认1岁) 吃饭 ...
随机推荐
- Swift中扩展的使用
import Foundation /* 扩展 1.使用扩展添加属性, 方法, 可变方法, 构造器, 下标, 嵌套类型 2.可以使一个已有类型符合一个或者多个协议 3.扩展与OC的Category类似 ...
- Comparable与compareTo
Comparable 1.什么是Comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 .实现此接口 ...
- 【转】【C/C++】内存分配函数:malloc,calloc,realloc,_alloca
转自:http://www.cnblogs.com/particle/archive/2012/09/01/2667034.html#commentform malloc: 原型:extern voi ...
- Objective-C中instancetype和id的区别
要区分instancetype和id,首先要弄清楚什么是关联返回类型(Related Result Type). 关联返回类型即一个方法的返回类型就是调用这个方法的调用者的类型.具有下列条件的方法具有 ...
- 一步步教你css3手风琴效果的实现
什么是手风琴效果? 首先我们先来看一段动画,如下图所示: 在上面动画中,我们不难发现,一排照片正常排列,当我鼠标移上(:hover)时,照片会变大显示并且把其它照片挤小.那么在鼠标来回移动的过程中,画 ...
- 为CKEDITOR内容中图片加上 图片服务器路径
做网站的时候,前台和后台是分开的, 用了CKEDITOR上传图片,但是发现内容带图片的时候,前台Web浏览的时候是一个红X,一看路径不对,上传的到数据库中的是相对的虚拟路径,例如:<img al ...
- Linux_access the file or directory which start with "-"
cd -- filename/dirName [ccmobil@vm-a65a-fc19 wstemp]$ cd -/ -bash: cd: -: invalid option cd: usage: ...
- 认识 web 服务器端脚本语言 PHP
---恢复内容开始--- 变量 定义:定义之后,值可以改变的量.PHP中的变量可以先后赋值为不同类型的值. 语法格式:$变量名 = 值; 常量 定义:常量:一旦声明之后,值就不能再改变的量. 语法格式 ...
- While installing plugin in eclipse luna, “Unable to acquire PluginConverter service” and “No repository found” errors appear in logs
http://stackoverflow.com/questions/18767831/while-installing-plugin-in-eclipse-luna-unable-to-acquir ...
- Linux企业级项目实践之网络爬虫(12)——处理HTTP应答头
Web服务器的HTTP应答一般由以下几项构成:一个状态行,一个或多个应答头,一个空行,内容文档.设置HTTP应答头往往和设置状态行中的状态代码结合起来.例如,有好几个表示"文档位置已经改变& ...