黑马程序员__三大特性

三大特性

封装

封装是把成员变量包装起来,不让外界直接访问。根据成员变量的作用域,默认都是protect类型的。

set 和get方法

有时候我们必须要访问成员变量,但是成员变量被封装起来了,这时候我们就可以用set或者get方法来间接访问成员变量,这样可以确保数据的安全性

 1 #import <Foundation/Foundation.h>
 2
 3 @interface Score : NSObject
 4 {
 5     int _cScore; // C语言成绩
 6     int _ocScore; // OC成绩
 7
 8     int _totalScore;// 总分
 9     int _averageScoe; // 平均分
10 }
11
12 - (void)setCScore:(int)cScore;
13 - (int)cScore;
14
15 - (void)setOcScore:(int)ocScore;
16 - (int)ocScore;
17
18 - (int)totalScore;
19 - (int)averageScore;
20
21 @end
22
23 @implementation Score
24 - (void)setCScore:(int)cScore
25 {
26     _cScore = cScore;
27
28     // 计算总分
29     _totalScore = _cScore + _ocScore;
30     _averageScoe = _totalScore/2;
31 }
32 - (int)cScore
33 {
34     return _cScore;
35 }
36
37 - (void)setOcScore:(int)ocScore
38 {
39     _ocScore = ocScore;
40
41     // 计算总分
42     _totalScore = _cScore + _ocScore;
43     _averageScoe = _totalScore/2;
44 }
45 // 监听成员变量的改变
46
47 - (int)ocScore
48 {
49     return _ocScore;
50 }
51
52 - (int)totalScore
53 {
54     return _totalScore;
55 }
56 - (int)averageScore
57 {
58     return _averageScoe;
59 }
60 @end

说明:

1.get方法是返回成员变量的,所有返回类型和成员变量的类型是一样的

2.sef方法是访问成员变量的值,或者修改成员变量的值,没有返回值,所有用(void)

3.set和get都是对象方法,所有都应该用-号开头

4.如果一个类基本没有任何的成员变量,里面的方法都是类方法,我们成为工具类

5.经典错误:unrecognized selector sent to instance 0x7fd2ea4097c0  不能是识别的消息发送了某个对象,0x7fd2ea4097c0 表示对象的地址

继承

使用场合

1> 当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中

2> 当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承 A类

继承的好处:

1> 抽取重复代码

2> 建立了类之间的关系

3> 子类可以拥有父类中的所有成员变量和方法

坏处:

子类和父类的耦合性太大

注意点

1> 基本上所有类的根类是NSObject

2>  重写:子类重新实现父类中的某个方法,覆盖父类以前的做法

3> 父类必须声明在子类的前面

4> 子类不能拥有和父类相同的成员变量

5> 调用某个方法时,优先去当前类中找,如果找不到,去父类中找

多态

定义:

多态指的是父类指针指向了子类对象

Dog *d = [Dog new]

Animal *a = [Dog new]

上面的例子中Dog是Animal的子类,对象a就是有多种形态,可以说是Dog类型的,也可以说是Animal内省的,调用方法时会检测对象的真实形象

说明

1.没有继承就没有多态

2.代码的体现:父类类型的指针指向子类对象

3.好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象

4.局限性:

父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法

补充 :self 和super

self:指向方法的调用者,代表着当期的对象,一般用在方法的实现中。如果用在对象方法中self就代表一个对象,如果用在类方法中,self就代表着一个类

在对象方法利用"self->成员变量名"访问当前对象内部的成员变量

[self 方法名]可以调用其他对象方法\类方法

super

作用;1直接调用父类的某个方法

2.super处在对象方法中,那么就会调用父类的对象方法

super处在类方法中,那么就会调用父类的类方法

3.使用场合:子类重写父类的方法时想保留父类的一些行为

时间: 2024-09-28 20:41:27

黑马程序员__三大特性的相关文章

黑马程序员__多线程

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 1.线程是程序执行的一条路径, 一个进程中可以包含多条线程,多线程并发执行可以提高程序的效率, 可以同时完成多项工作. 2.开启新线程的两种方式 1).继承Thread [java] view plaincopy public stati

黑马程序员__集合框架总结

------Java培训期待与您交流! ------- 前言: 本文是对Java集合框架做了一个概括性的解说,目的是对Java集合框架体系有个总体认识,如果你想学习具体的接口和类的使用方法,请参看Java API文档. 一.概述 数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法. 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口

&lt;&lt;黑马程序员&gt;&gt;OC编译器特性

点语法 特性:点语法的本质就是方法调用 成员变量的作用域 ① public :在任何地方都可以访问成员变量 在函数中可通过变量名来访问成员变量 ② private:表示私有,只能在当前类的对象方法中直接访问成员变量 ( @implemnetation中默认是@private(子类中不可访问)) ③ protected :可以在当前类和子类及其子类的对象方法中直接访问 ( 默认就是protected在interface) ④ package:只要处在同一个框架中,就能直接访问对象的变量. prop

黑马程序员__反射

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- <反射> 1.Class .class文件加载到内存中就是一个Class对象 获取Class对象的方式有3种: Class.forName(); 类名.class 对象.getClass() 例如: [java] view p

黑马程序员__反射_内省_动态代理

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 1.Class .class文件加载到内存中就是一个Class对象 获取Class对象的方式有3种: Scanner sc = newScanner("xxx.txt"); Class.forName(sc.nextL

黑马程序员__集合_List_Set_泛型

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- <集合> 1.集合:集合可以理解为一种容器, 长度可变, 可以存储任意类型的对象. 2.集合的分类: 集合框架的构成及分类: 单列集合:Collection,双列集合:Map. 1).Collection有两个子接口分别是Li

黑马程序员__多线程总结

java中的多线程 在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 对于直接继承Thread的类来说,代码大致框架是: class 类名 extends Thread{ 方法1; 方法2: - public void run(){ // other code- } 属性1: 属性2: -   } 先看一个简单的例子: /**  * @author Rollen-Holt 继承Thread类,直接调用run方法  * */ class hell

黑马程序员__抽象类与接口的区别

在Java语言中, abstract class 和interface是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力. 理解抽象类 abstract class和interface在Java语言中都是用来进行抽象类定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢? 在 面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样.并不是 所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就

黑马程序员__多态技巧总结

------Java培训期待与您交流! ------- 继承extends,不支持多继承,但支持多层继承 如何使用一个继承体系中的功能呢? 想要使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中共性功能. 通过了解共性功能,就可以知道该体系的基本功能. 那么这个体系已经可以基本使用了. 那么在具体调用时,要创建最子类的对象,为什么呢? 一是因为有可能父类不能创建对象, 二是创建子类对象可以使用更多的功能,包括基本的也包括特有的. 简单一句话:查阅父类功能,创建子类对象使用功能. ----