• objective-c 多态(顺带提一下权限控制)


    多态:

    是指一种事物的多种状态,不同类的对象可以定义共享相同名称的方法,这个就是多态的表现形式.

    多态的条件:

    继承关系,方法重写,父类的声明变量指向子类对象

    优点:

    增加了程序的可扩展性

     

     

     

    权限控制

     

    修饰符

    类内部

    子类

    任何地方

    private

    protected

    public

     

     

    示例代码

    computer.h

    @interface Computer : NSObject
    {
        /*
         @protected//默认的,当前类和子类中可用
         @public//任意地方
         @private//私有的 
         */
        NSString *name;
        float price;
    }
    @property(nonatomic)float price;
    @property(nonatomic,copy)NSString *name;
    -(id)initWithName:(NSString *)name price:(float)price;
    -(void)printf;
    
    @end

    computer.m

    @implementation Computer
    -(id)initWithName:(NSString *)name1 price:(float)price1{
        if (self = [super init]) {
            name = name1;
            price = price1;
        }
        return self;
    }
    -(void)printf{
        NSLog(@"%@,%.2f",name,price);
    }

    MacBook.h

    @interface MacBook : Computer
    
    @end

    MacBook.m

    @implementation MacBook
    -(void)printf{
        NSLog(@"%.2f",price);
    }
    @end

    main.m

    #import <Foundation/Foundation.h>
    #import "Computer.h"
    #import "MacBook.h"
    #import "lenovo.h"
    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            
            // insert code here...
            NSLog(@"Hello, World!");
            
            //一种事物的多种形态
            Computer *computer = [[Computer alloc]initWithName:@"acer" price:1000];
            [computer printf];
            
            Computer *macbook = [[MacBook alloc]initWithName:@"Macbook pro" price:13000];
            [macbook printf];
            
            Computer *lenovo2 = [[lenovo alloc]initWithName:@"联想" price:12345];
            [lenovo2 printf];
            
            
            //处理动态方法的调用
            //判断某个类是不是另外一个类的成员
            if ([macbook isKindOfClass:[Computer class]]) {
                NSLog(@"macbook是他的子类");
            }
            //判断能否响应@selector指定的方法
            if ([computer respondsToSelector:@selector(printf)]) {
                NSLog(@"可以响应");
            }
            //对象直接调用这个方法
            [computer performSelector:@selector(printf)];
            //判断某个类是不是该类的子类
            if ([MacBook isSubclassOfClass:[Computer class]]) {
                NSLog(@"Macbook是他的子类");
            }
            //判断两个对象是否为同一类型
            if ([MacBook class] == [lenovo class]) {
                NSLog(@"是一个类型");
            }
            
            
            /*
            //obj-c中的异常处理
            //减少崩溃
            @try {
                //正常代码写入try中
                [computer printf];
            }
            @catch (NSException *exception) {
                //捕获异常名称和原因
                NSLog(@"catch exception:%@ , %@",[exception name],[exception reason]);
                //记录日志
            }
            @finally {
                //要处理的代码
            }
             */
            
        }
        return 0;
    }

    明天打算继续看看多态,紧接着把协议和代理再次复习下

  • 相关阅读:
    用JAVA发送一个XML格式的HTTP请求
    LR 测试http协议xml格式数据接口
    软件测试术语
    linux学习笔记
    接口测试文章整理
    InputStream只能读取一次的解决办法 C# byte[] 和Stream转换
    zTree更新自定义标签>>>
    C# 各类常见Exception 异常信息
    C# 调用存储过程 Sql Server存储过程 存储过程报错,程序中的try
    SQL Server 2014 清除用户名和密码
  • 原文地址:https://www.cnblogs.com/mo-shou/p/3498692.html
Copyright © 2020-2023  润新知