【学习笔记】【oc】类和对象及类的三大基本特征
1.类和对象
类是抽象化,对象是具体化。
(1)定义类:
分为两个步骤,类的声明:定义类的成员变量和方法;@interface 用于声明定义类的接口部分,@end表面定义结束;。
成员变量的定义:{}用于声明该类的成员变量;语法:基本类型 成员变量名;
方法的定义:语法:方法类型标识符(+表示类方法,-表示实例方法)(方法返回值类型)方法签名关键字:(参数类型)(参数名)
方法签名关键字:方法名,形参标签,冒号。
(所有方法必须用括号括起来)
类的实现:实现类定义的方法。(在类的接口部分没有声明的方法和变量,只能在类的实现部分使用)。
ps:方法实现跟声明中的形参名可以不同,因为形参名仅仅相当于一个占位符。
(2)对象的产生和使用
三方面来实用类:(1)定义变量 类名* 变量名
(2)创建对象 [[类名 alloc]init];/[类名 new];
(3)调用类方法 [调用者 方法名:参数 形参标签:参数值...];
如果条件允许,可直接通过对象来访问成员变量。语法格式:对象->成员变量名;
对象和指针: 类也是一种指针类型,定义一个指针变量,指向实际的类对象,类对象存放在堆内存中。
(3)self关键字
作用:让类中的一个方法可以调用类中的其他方法或其他成员变量。
局部变量跟成员变量重名时,局部变量会隐藏成员变量,可用self强行引用成员变量。
记得:谁调用方法或成员变量,self就表示谁。
(4)动态绑定 id类型
动态绑定:oc会自动跟踪对象所属的类,它会在运行时判断该对象所属的类,并确定需要动态调用的方法,而不是在编译的时候确定要调用的方法。
定义id类型的变量时,当其调用方法时会执行动态绑定。
ps:
id *p=[类 alloc]init]; // p.age将会提出警告。
// 指针变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行其运行时类型所具有的方法,所以在编译时不能用id类型定义的指针来直接调用成员变量。
(5)对象的初始化
自定义初始化方法:
-(id)init
{
//调用父类的init进行初始化
//将初始化的对象赋值给self,如果self不为nil说明初始化成功执行接下来的代码
if(self=[super init])
{
//方法块
}
return self;
}
2.类的三大特征:封装,继承,多态
2.1:类的封装:
是什么:类要隐藏成员变量,只提供方法让外界修改。
有什么用:隐藏类的实现细节;让使用者只能使用类提供的方法来访问类的内部,可以在方法添加逻辑,从而控制对成员变量的合理访问;
可进行数据检查,保证对象信息的完整性;便于修改,提高代码的可维护性。
怎么做:隐藏对象的成员变量和方法的实现,不允许外界的直接访问;
把方法暴露出来,让方法来控制对这些成员变量进行完全的访问和操作。
----隐藏方式,访问控制符:
@private:只能在定义的类(当前类)中使用
@package:同个映像中使用
@private:类及其子类中使用
@public:大家都可以用
设置,修改获取对象的成员变量方法:
(1)自己定义 getter,setter方法
(2)系统自带的 合成存取方法(构造析构函数):
使用@property定义属性;使用@synthesize修改对应的成员变量名。
定义property时可在@property和类型中用括号添加一些额外的指示符。
@property(...)int a;
assign:
atomic(nonatomic):是否线程安全
copy:使用copy时,当使用setter方法时,会将要赋值的对象copy一个副本,再将副本传递给成员变量。
getter,setter:为系统的getter,setter方法改名
readonly,readwrite:
retain:
(3)点语法:
(4)KVC方法:
2.2类的继承:(单继承:直接父类只有1个)
类通过定义子类来继承父类。
父类又叫超类,基类。
当子类可以使用父类所有的成员变量和方法。
子类可重写父类的方法,子类调用覆盖了父类的方法可以用super关键字。
2.3类的多态:
【学习笔记】【oc】类和对象及类的三大基本特征的更多相关文章
- [core java学习笔记][第四章对象与类]
4.3 用户自定义类 4.3.1 类数组的声明 需要两次new Employee[]=staff=new Employedd[3]; staff[0]=new Employedd(参数列表); sta ...
- Java学习笔记(2)--- 对象和类入门,java包,this 和 super区别
1.对象和类(Object and class): 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作. 面对对象编程是java非常重要的一部分,作者本身之前学过c ...
- java学习笔记(3)——对象与类(日期)
变量.类型.赋值.运算符等等: https://blog.csdn.net/common77zwq/article/details/81988676 1.概念: 面向对象程序设计OOP.类class. ...
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936本文章博客地址:http://blog.csdn.net/qq21497936/article/details/78516 ...
- C#可扩展编程之MEF学习笔记(三):导出类的方法和属性
前面说完了导入和导出的几种方法,如果大家细心的话会注意到前面我们导出的都是类,那么方法和属性能不能导出呢???答案是肯定的,下面就来说下MEF是如何导出方法和属性的. 还是前面的代码,第二篇中已经提供 ...
- js权威指南学习笔记(四)对象
1.创建对象 (1).通过对象直接量的方式创建 说明:对象直接量是由若干名/值对组成的映射表,名/值对中间用冒号分隔,名/值对之间用逗号分隔,整个映射表用花括号括起来. 如: 5 5 ...
- PowerBuilder学习笔记之14用户自定义对象
教程链接:https://wenku.baidu.com/view/9730d1c7aa00b52acec7ca05.html?re=view&rec_flag=default&sxt ...
- Swift学习笔记 - OC中关于NSClassFromString获取不到Swift类的解决方案
在OC和Swift混编的过程中发现在OC中通过NSClassFromString获取不到Swift中的类,调研了一下发现问题所在,下面是我的解决方案: 问题的发现过程 UIViewController ...
- cocos2d-x实战 C++卷 学习笔记--第4章 字符串 __String类
前言: <cocos2d-x实战C++卷>学习笔记.(cocos2d-x 是3.0版本) 介绍 cocos2d-x 通用的字符串类 __String . 使用cocos2d::__Str ...
随机推荐
- delphi 通过控件的handle取得控件
例子代码如下: vartsg:TstringGrid;begintsg:=Tstringgrid(FindControl(handle));//正常使用TstringGrid//tsg......./ ...
- Convert Sorted Array to Binary Search Tree——LeetCode
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 题目 ...
- 2013=11=12 SQL 实验
--22. 查询选修课程成绩至少有一门在80分以上的学生学号: select distinct sno from sc where grade>80 go --23. 查询选修课程成绩均在80分 ...
- 弱爆了的Candies
题目出处 题目描述: n个小朋友坐成一排,每个小朋友有一个数表示他的表现(数字越大表现越好).老师要给每个小朋友发至少1颗糖,相邻的两个小朋友,得分较高的小朋友必须得到更多的糖,问:老师至少需要给出多 ...
- 首届京东自有品牌科技周“京东点亮生活”圆满成功 - 课程公告板 - 京东内部论坛 - Powered by Discuz!
首届京东自有品牌科技周"京东点亮生活"圆满成功 - 课程公告板 - 京东内部论坛 - Powered by Discuz! 首届京东自有品牌科技周"京东点亮生活" ...
- C++编写ATM(2)
//上一个程序,密码不能被隐藏和该ATM可以让人取大于余额的乐币,这可定不行的.所以再次改了下,解决这两个问题. // ATM的初始.cpp : 定义控制台应用程序的入口点. // /******** ...
- jquery 随机数
var jschars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', ...
- motan源码分析一:服务发布及注册
motan是新浪微博开源的服务治理框架,具体介绍请看:http://tech.sina.com.cn/i/2016-05-10/doc-ifxryhhh1869879.shtml. 本系列的文章将分析 ...
- linux下清理系统垃圾
可以使用以下命令清理系统垃圾sudo apt-get autoclean 清理旧版本的软件缓存sudo apt-get clean 清理所有软件缓存sudo apt-get autoremove 删除 ...
- UI开发--响应者链条
一.触摸事件处理的详细过程 用户点击屏幕后产生的一个触摸事件,经过一些列的传递过程后,会找到最合适的视图控件来处理这个事件 找到最合适的视图控件后,就会调用控件的touches方法来作具体的事件处理 ...