黑马程序员——IOS基础(OC面向对象编程三)

来源:互联网 发布:织梦cms使用教程 编辑:程序博客网 时间:2024/05/22 22:12

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、使用super

     super关键字表示父类,可以使用super访问父类中被子类隐藏的或重写的方法,例如使用“[super setX]"表示调用父类的
setX方法。
     ClassA.h代码:
                    #import <Foundation/Foundation.h>
                    @interface ClassA : NSObject
                      {  int x;   }
                      - (void) setx;
                     @end

     ClassA.m代码:
                     #import " ClassA.h"
                     @implementation ClassA
                     - (void) set X
                        {  x = 10;  }
                      @end

     ClassB.h代码:
                    #import <Foundation/Foundation.h>
                    #import " ClassA.h "
                    @interface ClassB: ClassA
                    - (void) printX;
                    - (void) setX;
                    @end

     ClassB.m代码:
                     #import"ClassB.h"
                     @implementation ClassB
                        - (void) printX
                           {  NSLog(@"%i",x);  }
                        - (void)setX
                            {  x = 11;
                               [super setX];
                             }
                        @end
      执行以下代码:
                      #import "ClassA.h"
                      #import "ClassB.h"
      int main (int arge, const char * argv[ ])
                         {  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
                            ClassB.ClassB = [[ClassB alloc]init];
                            [classB setX];
                            [classB printX];
                            [classB release];
                            [pool drain];
                            return 0;
                          }
         程序执行结果:10

二、抽象类

      在面向对象的概念中,所有的对象都是通过类来描绘的,但反过来却不是这样,并不是所有的类都是用来描绘对象的
,如果一个类中乜有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表示我们在对问题
领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质相同的具体概念的抽象。抽象类定义的母的主
要是为了别的类能从它们那里继承,这些抽象的方法和属性能够被很多不同的子类使用,从而保证子类继承一个相同的定义,
抽象类能够减少实现子类的负担。但OC语言没有特别的关键字来定义抽象类,从层面上说,OC没有抽象类这个概念。

三、动态方法调用

    超类的引用变量可以引用子类对象,OC就是使用这个原则来实现动态调用。
    示例代码:
               Test1.h代码:
                            #import <Cocoa/Cocoa.h>
                            @interface Test1 : NSObject {  }
                             -(void) print;
                             @end

               Test1.m代码:
                              #import ”Test1.h"
                              @implementation Test1
                              - (void) print 
                                { NSLog(@"我是test1“);}
                               @end

               然后定义另一个类,它也包含了一个同名的方法,打印出来一行不同的句子以示区分
                 Test.h代码:
                             #import <Foundation/Foundation.h>
                             @interface Test : NSObject {  }
                             - (void) print;
                             @end
                   
                 Test.m代码:
                             #import ”Test1.h"
                            @implementation Test1
                              - (void) print 
                              { NSLog(@"我是test“);}
                              @end
    
                 测试:
                      ClassTest.m代码:
                                          #import <Foundation/Foundation.h>
                                          #import "Test.h"
                                           #import "Test1.h"
                                      int main (int arge, const char *argv[]  )
                                      {  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
                                          idTest = test;
                                          [idTest print];
                                          idTest = test1;
                                          [idtest print];
                                          [test release];
                                          [test1 release];
                                          [pool drain]
                                           return 0;
                                       }
                     程序结果为: 我是test
                                            我是test1

四、访问控制 

     在接口部分声明实例变量的时候,可以把下面的三个指令放在实例变量的前面,以便更加精确地控制作用域
      @protected:用此指令修饰的实例变量可以给该类和任何子类定义的方法直接访问,这是默认的情况
      @private:用此指令修饰的实例变量可被定义在该类的方法直接访问,但不能被子类中定义的方法直接访问
      @public:用此指令修饰的实例变量可以被该类中的方法直接访问,也可以被其他类定义的方法直接访问。
     
     访问指令的用法:
          #import <Foundation/Foundation.h>
         @interface Test;NSObject
          {  @public
                 int i;
                 int j;
   
              @protected
                  float m;
                  float n;

              @private
                  double x;
                  double y;
           }
           @end


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
0 0
原创粉丝点击