`
gkuiyj
  • 浏览: 88154 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Objective-C个人学习系列(5) 面向对象(封装、继承、多态)

 
阅读更多

 

//get set 方法就是一个封装的案例

//不是将变量设置成public,而是将变量封装,通过get、set方法来访问

 

//类的继承------------------------------------------------

#import <Foundation/Foundation.h>

//定义父类

@interface Animal : NSObject{

    

    int weight;

    @privateint age;

    @protectedint sex;

    @public int type;

    

}

@property int age ,weight,sex,type;

 

-(id)init;

-(void)move;

 

 

@end

 

#import "Animal.h"

 

@implementation Animal

 

@synthesize age,sex,type,weight;

 

-(id)init{

    self = [super init];

    if (self!=nil) {

        

        self.age = 25;

        self.sex = 1;

        self.type = 3;

        self.weight = 50;

    }

    returnself;

}

-(void)move{

    NSLog(@"Animal move !");

}

 

@end

 

#import "Animal.h"

//定义子类,继承父类Animal

@interface Dog : Animal{   

    int color;

    int kind;

}

@property int color,kind;

 

-(id)init;

-(void)keepDoor;

-(void)move;

-(void)play;

 

@end

#import "Dog.h"

#import "Animal.h"

 

@implementation Dog

 

@synthesize color,kind;

 

-(id)init{

    //self 指向自身(当前的实例对象)的指针对象,

    //super 指向父类对象的指针

    self = [superinit];    //子类重写init时必须先初始化父类

    if (self) {

        self.kind = 1;

        self.color = 20;

    }

    returnself;

}

-(void)keepDoor{

    color = 100;

    kind = 2;

    

    //继承父类的实例变量

    type = 4;

    sex = 1;

    //age = 5;    //父类中为private

    weight = 60;

    

    NSLog(@"I can Keep You Door!");

}

 

-(void)move{

    

    NSLog(@"I can run speed!");

}

 

-(void)play{

    

}

 

@end

 

//--------多态---------------

/**

 使用不同的类共享相同的方法名称的能力称为多态。

 多态中的一组类,每个都能响应相同的一个方法名,每个类中定义的该方法都封装了不同都操作,

 编译器在编译时不会去检查对象的类型,在运行时才会确定具体的类,并找到其方法调用,

 如果子类没有该方法,则调用父类的方法。(参考动态类型、动态绑定)

 <多态的三个前提条件:继承、重写、父类引用指向子类对象。>

 

 **/

 

#import <Foundation/Foundation.h>

//定义父类

@interface Animal : NSObject

-(void)move;

 

@end

 

#import "Animal.h"

 

@implementation Animal

-(void)move{

    NSLog(@"Animal Move 111");

}

 

@end

 

#import "Animal.h"

//定义子类,继承父类

@interface Dog : Animal

 

-(void)move;

 

@end

 

#import "Dog.h"

 

@implementation Dog

//重写父类方法

-(void)move{

    NSLog(@"Dog move 222");

}

 

@end

 

 

#import <Foundation/Foundation.h>

#import "Animal.h"

#import "Dog.h"

#import "Cat.h"

 

int main(int argc, const char * argv[])

{

 

    @autoreleasepool {

 

        Animal *a =[[Dog alloc]init]; //父类引用指向子类对象

        [a move];           //Output:Dog move 222  此处调用的子类方法

        

        //oc中id类型是个特殊的多态用法

        NSMutableArray* arr = [[NSMutableArrayalloc]init];

        //将不同的类用id类型存储到数组

        for (int i = 0; i<5; i++) {

            id pid = nil;

            if (i%2==0) {

                NSString* s = @"abc";

                pid = s;

            }else{

                NSNumber *n = [NSNumber numberWithInt:i];

                pid = n;

            }

            [arr addObject:pid];

        }

        

        

        for (int i = 0; i < 5; i++) {

            id p = arr[i];

            NSLog(@"%@",p);         //该处调用父类的description方法

        }

        

    }

    

 

 

}

 

分享到:
评论

相关推荐

    Object-C语言教程&

    许多传统的面向对象概念,例如封装,继承以及多态,在 Objective-C 中都有所体现。这里有一些重要的不同,但是这些不同在这文章会表现出来,而且如果你需要还有更多详细的信息存在。 如果你从来没有使用任何编程...

    Object-C语言教程.docx

    Objective-C支持类、对象、继承、封装、多态等面向对象的特性,同时它还具有动态运行时特性,可以在运行时修改类、对象的结构和行为。此外,Objective-C采用动态绑定,方法的调用在运行时确定,使得程序更加灵活。在...

    Object-C 入门教程-object-c如何学习

    许多传统的面向对象概念,例如封装,继承以及多态,在 Objective-C 中都有所体现。这里有一些重要的不同,但是这些不同在这文章会表现出来,而且如果你需要还有更多详细的信息存在。 如果你从来没有使用任何编程...

    Objective-C2.0程序设计

    13.3.5 不要忘记面向对象编程思想 13.4 指针 13.4.1 指针和结构 13.4.2 指针、方法和函数 13.4.3 指针和数组 13.4.4 指针运算 13.4.5 指针和内存地址 13.5 联合 13.6 它们不是对象 13.7 其他语言特性 13.7.1 ...

    Objective-C 快速入门教程

    本文主要介绍Objective-C的基本语法,传统的面向对象语言的封装,继承以及多态在Objective-C上会是什么样子。

    Object-C语言教程&案例,要点难点,代码示例,代码解析

    面向对象:理解类(Class)、对象(Object)、实例变量(Instance Variables)、方法(Methods)、继承(Inheritance)、封装(Encapsulation)和多态(Polymorphism)等概念。 内存管理:了解ARC(Automatic Reference Counting,...

    Object-C语言教程0220.zip00000001

    Objective-C 是一种编程语言,由 Brad Cox 和 Tom Love 在1980年代早期开发,旨在为 Smalltalk 风格的对象导向...Objective-C 继承了 C 的语法和结构,同时加入了对象导向编程的特性,如面向对象、多态、继承和封装。

    Lua 面向对象

    Lua 面向对象 面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构。 以下几种编程语言都支持面向对象编程: C++ Java Objective-C Smalltalk C# Ruby 面向对象特征 1) 封装:指...

    Swift实现播放器项目联系

    同时也支持面向协议编程,使得多态、封装和继承等面向对象特性更加灵活。 4. **函数式编程**:Swift也支持函数式编程范式,包括高阶函数、闭包、不可变性等特性。这使得编写函数式风格的代码变得更加简洁和优雅。 ...

Global site tag (gtag.js) - Google Analytics