2015.12.22 类的三大特性 协议的简单介绍

类的三大特性:封装、继承、多态

封装:

  1. 对于头文件里面的一些成员变量,可以使用@private @public @protected来限制权限

    @public  公有的 类本身可以访问,子类可以继承,外部也可以访问 pxd->name

    @private 私有的 类本身可以访问,子类无法继承,外部不可以访问

    @protected 受保护的 类本身可以访问, 子类可以继承, 外部不可以访问。默认就是protected

    2.需要给外部使用的方法或者属性就定义在头文件里面声明.h

    不需要暴露给外部使用的方法或者属性就在实现文件里面声明.m    

  //匿名扩展

      @interface Person ()

      @property (nonatomic, strong) NSString *myPassword;

      - (void)startDoing;

      @end


继承

  1. 什么情况下需要继承

    当工程中或者系统框架里面已经存在某些类,需要在这些类的基础上添加一些方法或者属性,那么可以选择继承。

  2.什么是继承

    继承就是无需自己重新定义,就可以获取父类的一些方法或者属性。

  3.继承里面的一些术语

    父类(超类):被继承的那个类称作父类 super class

    子类            :自己定义的那个类就称做子类

    根类 (root)  :  所有类的父类叫做根类 NSObject

  4.注意

    OC里面只支持单继承,不能实现多继承

  5.如何继承一个类(Animal类继承与NSObject)

    @interface Animal : NSObject

    @end

  6.调用子类的一个方法,如果子类中没有实现,那么会自动到父类里面去寻找,如果找到root类,没有发现,那么报错。

  7.父类中已经有相关方法的实现,那么子类中需要有自己的实现怎么办?

    override(可以通过重写的方式来实现自己的功能。)

  8.self 和 super

    self: 即将创建的这个对象的指针 是类的一个隐藏属性

    super:它并不是指向父类的一个指针, 是父类的一个标示

    self编译器会先从当前这个类里面去查找相应的方法或者是属性,如果找不到再去父类中查找

    super 告诉编译器直接去父类中查找

  9.类型自动向上转换

    TV —> Furniture

    Light —>Furniture

@interface Person : NSObject

- (void)turnOn:(Furniture *)fur;

- (void)turnOff:(Furniture *)fur;

@end

Light *jgd = [[Light alloc] init];

jgd.name = @"客厅的灯";

TV *xiaomi = [[TV alloc] init];

xiaomi.name = @"小米电视机";

Person *pxd = [[Person alloc] init];

[pxd turnOn:jgd];

[pxd turnOn:xiaomi];

[pxd turnOff:xiaomi];

[pxd turnOff:jgd];


多态:

  同一个方法,拥有不同的实现:

    1. 使用继承的方式实现多态

    2. 使用协议的方式来实现多态



协议:

  1.如何定义一个协议

    协议只是声明方法(接口),没有具体的实现,谁服从我,谁就实现

 1 /*
 2
 3 协议以@protocol开始
 4
 5 AnimalAction 是协议的名字
 6
 7 <NSObject> 表示AnimalAction协议服从另外一个NSObject协议
 8
 9 */
10
11 @protocol AnimalAction <NSObject>
12
13
14 @required//如果服从我这个协议 下面的方法必须实现
15
16 - (void)eat;
17
18
19 @optional//可以选择实现optional下面的方法
20
21 - (void)run;
22
23 - (void)walk;
24
25 - (void)sleep;
26
27 - (void)bite;
28
29 - (void)fly;
30
31
32 @end 

2.如何使用一个协议

#import "AnimalAction.h"

@interface Tiger : NSObject<AnimalAction>

@end 

@implementation Tiger

- (void)eat{//必须实现 因为是required修饰的

    NSLog(@"我是老虎 我只吃肉");

}

- (void)walk{

    NSLog(@"走只是为了发现更好的母老虎");

}

- (void)sleep{

    NSLog(@"睡只是为了更好的走");

}

@end
时间: 2024-10-06 15:06:57

2015.12.22 类的三大特性 协议的简单介绍的相关文章

转 OC温故:类的三大特性(封装,继承,多态)

原文标题:OC学习篇之---类的三大特性(封装,继承,多态) 我们都知道,面向对象程序设计中的类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性: 一.封装 封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能,Java中有四种访问权限修饰符: 1 public,default,protected,private 访问权限依次递减,这样我们在定义类的时候,哪些字段和方法不想暴露出去,哪些字段和方法可以暴露,可以通过

第9章 Java类的三大特性之一:继承

1.什么是继承 子类继承父类就是对父类的扩展,继承时会自动拥有父类所拥有的处private之外的所有成员作用:增加代码复用语法格式: class 子类名 extends 父类名{----}第9章 Java类的三大特性之一:继承例子: 1 //测试类,创建子类对象,可以直接调用属性和方法 2 public class testDog { 3 public static void main(String[] args) { 4 Dog dog = new Dog(); 5 dog.age=10; 6

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

之前的一片文章介绍了OC中类的初始化方法和点语法的使用,今天来继续学习OC中的类的三大特性,我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性: 一.封装 学习过Java中类的同学可能都知道了,封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能,Java中有四种访问权限修饰符:public,default,protected,private,访问权限一次递减的,这样我们在定义类的时

OC基础 类的三大特性

OC基础  类的三大特性 OC的类和JAVA一样,都有三大特性:继承,封装,多态,那么我们就来看一下OC中类的三大特性. 1.继承 继承的特点: (1)子类从父类继承了属性和方法. (2)子类独有的属性和方法不能被父类使用. (3)子类独有的属性和方法,不能够在子类之间互相使用. (4)子类能够重写父类的方法,子类调用该方法时:首先调用子类的方法,如果子类没有该方法,就调用父类的该方法. (5)子类对象指针可以转换成父类对象指针,但是父类对象指针不能够转换成子类对象指针. 三种权限变量的继承:

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

之前的一片文章介绍了OC中类的初始化方法和点语法的使用:http://blog.csdn.net/jiangwei0910410003/article/details/41683873,今天来继续学习OC中的类的三大特性,我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今天就来看一下OC中类的三大特性: 一.封装 学习过Java中类的同学可能都知道了,封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能,Java

黑马程序员 ——ios点语法和类的三大特性

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); 一.点语法 (一)认识点语法

PYTHON 类的三大特性

三大特性:封装.继承.多态 成员: 字段 静态字段(每个对象都有一份).普通字段(每个对象都不同的数据) 方法 静态方法(无需使用对象封装的内容).类方法.普通方法(使用对象中的数据) 特性 普通特性(将方法伪造成字段) 快速判断,类执行,对象执行: 有self,对象执行 无self,类执行

Swift中协议的简单介绍

熟悉objective-c语言的同学们肯定对协议都不陌生,在Swift中苹果将 protocol 这种语法发扬的更加深入和彻底.Swift语言中的 protocol 不仅能定义方法还能定义属性,配合 extension 扩展的使用还能提供一些方法的默认实现,而且不仅类可以遵循协议,现在的枚举和结构体也能遵循协议了.基于此本文从 1,协议中定义属性和方法 , 2,协议的继承.聚合.关联类型 , 3,协议的扩展 , 4,Swift标准库中常见的协议 , 5,为什么要使用协议 5个方面结合自身的学习经

黑马程序员--Objective-C之--block的使用以及协议的简单介绍

块(block)是OC对ANSI C所做的扩展,使用块可以更好地简化OC编程,而且OC的很多API都依赖于块. 一.block (一).block的使用方法 语法格式如下: ^ [块返回值类型] (形参1,形参2,...) { } 必须以^开头,返回值类型通常都被省略,如果没有形参,建议使用void作为占位符. 如果程序需要多次调用已经定义的块,那么应该將块赋值给一个块变量,定义块变量的语法格式如下: block返回值类型 (^block变量名) (形参类型1,形参类型2,...); 定义块变量