一、类方法的使用

/*像我们之前学的方法,必须先实例化这个类的对象才能调用这个方法,类方法不用实例化对象,直接调用这个方法。之前学的方法调用的语法:[对象名  方法名];  //对象方法类方法:[类名  方法名];   //类方法定义:语法:+(返回值类型)方法名:参数列表;注意:1.类方法不能直接访问成员变量。2.类方法里面可以调用其他的类方法,但不能直接调用对象方法。3.对象方法里面可以调用类方法。4.类方法可以和对象方法同名,互不影响。因为类方法用类名调用,对象方法用对象名调用。5.类方法和实例方法一样在@interface里声明,在@implementation里实现。6.类方法只能由类名来调用,不能用对象来调用。对象方法只能由对象调用,不能用类名调用.7.两个类方法之间不要直接相互调用否则死循环。
*/#import <Foundation/Foundation.h>
@interface Test1: NSObject
/***对象方法*/
-(void)NSLog1:(NSString *) str;
/***类方法*/
+(void)NSLog1:(NSString *) str;
@end@implementation Test1-(void)NSLog1:(NSString  *)str{//返回str的值return str;
}+(void)NSLog1:(NSString  *)str{//返回str的值return str;
}@endint main(int argc, const char * argv[]) {@autoreleasepool {
//        Test1*clt = [Test1new];
//
//        NSString *str= [clt addNum1:@"哈哈哈";
//
//        NSLog(@"str=%@",str);
        NSString *str= [clt addNum1:@"哈哈哈";NSLog(@"str=%@",str);}return 0;
}

二、匿名对象

/*匿名对象:就是没有任何的指针指向的对象就叫匿名对象 。匿名对象的缺点:只能用一次 。优点:方便作为参数传递。
*/
#import <Foundation/Foundation.h>
@interface Person : NSObject{@publicNSString *_name;int _age;
}
-(void)sayHi;
@end@implementation Person
-(void)sayHi{NSLog(@"你好,我叫%@  今年%d岁",_name,_age);
}
@endint main(int argc, const char * argv[]) {@autoreleasepool {
//        Person *p =[Person new];//这个并不是匿名对象
//        p->_name = @"哈哈";
//        [p sayHi];
//        [Person new];//这个就是匿名对象
        [Person new]->_age =16; //这是匿名对象的成员赋值[Person new]->_name = @"周帅帅"; //这是匿名对象的成员赋值[[Person new] sayHi]; //这是匿名对象调用方法
    }return 0;
}

三、封装

/*封装实现步骤:1.@public去掉,默认是@protected。2.写一个方法用来给属性赋值的,还要写一个方法用来给属性取值。3.在赋值方法里面做过滤。4.使用的时候直接调用方法就可以了。封装的好处:可以控制是否只读,或者只写。只封装读的方法,那么就是只读,如果只封装赋值,那么就是只写。如果两个都封装就是可读可写。setter:赋值器:其实就是你封装的给某个属性赋值的方法,就叫setter方法。例:-(void)setName:(NSString *)name; //这就是一个setter方法规范:1.方法名以set开头,后面接不要_的属性名,并且首字母大写2.必须有参数,参数的类型跟你要封装的属性类型一致,形参名字可以随便取,但是一般的做法都是不要下划线的属性。3.返回值一定是void。4.形参名不能和成员变量名(属性名)一样(苹果官方推荐成员变量名前加_以示区分)。所以之前为什么要给属性名加_呢?就是为了和setter方法的形参名区分开来。getter:取值器其实就是你封装的给某个属性取值的方法,就叫getter方法。例:-(NSString *)name; //这就是一个getter方法。规范:1.方法名就是去掉下划线的属性名。2.必须有返回值,并且返回值类型与要封装的属性类型一致。3.没有参数。
*/
@interface Person : NSObject{NSString *_name;int _age;BOOL _gender;
}/***  给name赋值的方法*  需要一个参数,因为你要给我传值,我才能对属性赋值*  但是参数什么类型呢?根据你要赋值的属性的类型确定*  比如说要给_name赋值,那么很明显就需要传入一个跟_name同类型的数据*/
-(void)setName:(NSString *)name;/***  取_name值的方法*  需要一个返回值,因为你需要把值交给别人取值,所以就需要返回值了*  但是返回值类型呢?那肯定是跟你需要取值的属性的类型一致*/-(NSString *)name;
/***  给_age赋值的方法*/
-(void)setAge:(int)age;
/***  给_age取值的方法*/
-(int)age;
-(BOOL)gender;
@end@implementation Person-(BOOL)gender{return  _gender;
}-(void)setName:(NSString *)name{if([name isEqualTo:@"你麻痹"]){_name = @"无名氏";}else{//给属性赋值为你传进来的参数_name = name;}
}-(NSString *)name{//返回这个属性return _name;
}/***  千万要记得,age是传进来的形参名,_age才是属性*/
-(void)setAge:(int)age{if(age<0 || age>120){//如果传进来的值不合法,就给_age属性赋值为默认的16_age = 16;}else{//如果合法,我就用你传进来的值_age = age;}
}-(int)age{return _age;
}
@end/*
重载:就是允许方法同名,但是参数不同。
oc中的方法 没有重载这个概念。oc中 : 也是方法名的一部分。
*//*
oc中 static 关键字:1.修饰局部变量,把这个局部变量变为静态变量。 静态变量程序一启动就加载,程序退出才会回收。2.修饰全局变量,代表这个全局变量只能在本模块中访问。3.修饰函数,代表这个函数只能在本模块中调用。4.不能修饰成员变量(属性)5.不能修饰方法
*/

四、继承

/*继承:简单来说,就是一个类B能够拥有类A的全部属性和方法,并且还有自己一些独有的属性或者方法,这可以称之为继承类B继承自类A 在定义类的时候 在后面写一个 : 类名 例如:@interface Person : NSObject{}@end类方法调用:[类名 方法名];再次注意:OC中类B继承自类A,那么类B会拥有类A的所有属性和方法再次强调继承的语法:在声明类的时候在类名后面 加一个 : 然后写一个 要继承的类名继承虽然说语法上允许你继承自任何类但是,一定要符合客观事实(基本要符合 is a原则)student is a person某个类一定要属于某个类比如说:学生是个人 注意:以下语法上完全没问题,但是不符合现实,强烈不允许这样做@interface Dog : Person@end比如说:狗不能继承自人类,因为狗不是人@interface Dog : Animal@end这样就可以,因为狗是动物父类:被继承的那个类就叫父类。子类:继承的那个类就叫子类。基类:父类也叫基类,只不过很多书以及很多说法,说基类就是NSObject。以后说基类,一般就指NSObject。根类:NSObject继承的特点:1.子类可以拥有父类所有的属性和方法(包括父类私有的)。2.如果有一个子类B继承自己类A,然后类B又有一个子类C,那么这个子类C也会有类A的所有属性和方法;类具有传递性。3.类不可以继承自多个类!类的单根性:就是只能有一个根。4.一个类能被多个类继承。例如:Person可以被student继承,也可以被teacher继承。5.类的继承要合理:引用一句话:“人是人他妈生的,妖是妖他妈生的”。
*/#import <Foundation/Foundation.h>@interface Person : NSObject{@publicNSString *_name;int _age;
}-(void)sayHi;@end@implementation Person-(void)sayHi{NSLog(@"hello,eat no?");
}@end@interface Student : Person@end@implementation Student@endint main(int argc, const char * argv[]) {@autoreleasepool {        Person *p = [Person new];        [p sayHi];        [Person alloc];        Student *s = [Student new];        s->_name = @"刘晓晓";        NSLog(@"%@",s->_name);        [s sayHi];        }return 0;
}

转载于:https://www.cnblogs.com/bobo-pcb/p/4975327.html

oc语言学习之基础知识点介绍(三):类方法、封装以及继承的介绍相关推荐

  1. 结构体怎么赋值_c语言学习之基础知识点介绍:结构体的介绍

    一.结构体的介绍 /* 语法:struct 结构体名{成员列表;};切记切记有分号!说明:成员列表就是指你要保存哪些类型的数据.注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类型.因为类型 ...

  2. c语言学习之基础知识点介绍(十):数组

    本节主要介绍数组. 一.数组 /* 数组:一个变量可以存n个变量. 语法:类型 数组名[长度(正整数)]; 例如:int score[5];//定义了一个int类型的数组,长度为5,可以保存5个数据. ...

  3. c语言学习之基础知识点介绍(十二):结构体的介绍

    一.结构体的介绍 /* 语法:struct 结构体名{成员列表;};切记切记有分号!说明:成员列表就是指你要保存哪些类型的数据.注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类型.因为类型 ...

  4. C语言学习之输入一个大于三的值判断是否为素数

    C语言学习之输入一个大于三的值判断是否为素数 方法一 #include <stdio.h> int main(){int number,x; //定义变量printf("请输入一 ...

  5. 学习面向对象思想,开始考虑通过封装、 继承、多态把程序的耦合度降低

    学习面向对象思想,开始考虑通过封装. 继承.多态把程序的耦合度降低 转载于:https://www.cnblogs.com/Andys/archive/2013/04/05/3001175.html

  6. 前端学习——JS基础知识点复习

    一. JS复习 1.1 如何使用JS HTML标签内使用JS,要求写在onclick等事件属性或者href属性中(不推荐使用) 页面中的script标签内可以直接写JS代码 script标签的src属 ...

  7. Java学习---面试基础知识点总结

    Java中sleep和wait的区别 ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类.sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程 ...

  8. go get 拉取指定版本_go语言学习笔记-基础知识-3

    相关文档 go语言学习笔记-目录 1.简介 1.1 什么是GO Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易.Go是从2007年末由Robert Griesemer, Rob ...

  9. 易语言学习笔记——基础篇

    易语言学习笔记20180710 一. 易语言的数据类型可以分为基本数据类型和特殊数据类型 1.     其中基本数据类型分为: ①   数值型 ②   逻辑型 ③   日期时间型 ④   文本型 ⑤  ...

最新文章

  1. Python 如何查看内存地址
  2. linux下查看已经安装的jdk 并卸载jdk
  3. POJ 3041 Asteroids(最小点覆盖)题解
  4. python队列线程池_实例详解:python高级编程之消息队列(Queue)与进程池(Pool)
  5. 揭秘罗永浩直播带货幕后之师
  6. 设计模式 — 结构型模式 — 组合模式
  7. ArcGIS + Oracle 创建企业级地理数据库
  8. mysql排序加权_mysql多关键词查询相关匹配加权排序
  9. jsp网页实现任意进制的数转换成任意进制数
  10. java基本变量的堆栈_JAVA经验谈:尽可能使用堆栈变量
  11. 笔记3:Tensorflow2.0实战之MNSIT数据集
  12. Programming WCF Services中文翻译(3)-契约
  13. Android计算器界面布局
  14. 输入服务器名或许可证文件,vCenter 6.0 部署文档
  15. 全国机器人足球锦标赛
  16. 破解Charles抓包工具
  17. 医院HIS系统厂家统计
  18. 谷歌浏览器导致电脑右下角莫名弹出广告解决办法
  19. 处理服务器恶意程序 kthreaddi挖矿
  20. 当当网复工员工确诊,66人集中隔离,负责人被约谈

热门文章

  1. 2012《Linux杂志》读者选择奖 (Readers' Choice Awards 2012- Linux Journal)
  2. Simple:Press
  3. 不小心发现谷歌 Firebase 消息服务的漏洞,获奖3万+美元
  4. django获取字段列表(values/values_list/flat)
  5. 130242014049+魏俊斌+第2次试验
  6. 【讨论帖】你认为怎么注释是比较合理妥当的方式
  7. 进程VS线程---操作类型
  8. 每周工作量及时间统计
  9. Linux入门之磁盘管理(3)文件系统挂载
  10. Linux入门之VIM快捷使用