面向对象的三大特征

OC中的封装、继承、多态
1)一个类中有多个属性,而对于属性,为了安全不应该给属性修饰@public,默认的是有@protect修饰符修饰的。而被@protect修饰符修饰的属性只能被在本类和子类中的对象通过箭头访问。那么想在别处需要使用这个属性,就应该给每个属性封装一个setter和getter方法,如果想使用这个属性的时候,直接调用setter和getter方法就可以了。
属性的setter方法是用于属性的赋值,而getter方法是取值。setter方法:- (返回值类型) set去掉下划线且首字母大写的属性名:(参数的返回值类型)去掉下划线的属性名;getter方法:- (void) 去掉下划线的属性名;
关于在属性的setter方法中给属性赋值是不能随便赋值的,对于基本数据类型,直接赋值就可以了,比如属性是 int age; _age = age; 如果是属性是OC对象,就不能直接赋值,因为OC对象本身就是个指针,存在堆区中,存得是一个地址。比如说NSString *_name;_name存在堆区中,如果给_name赋值 _name = @“小逗子”; 那么这个_name存的是@“小逗子”字符串的地址,而@“小逗子”是存在常量区的,常量区的数据一旦创建直到程序运行结束之前,是不会被回收的,因此给OC对象属性赋值之前,得先判断你要赋的那个值是存在了,如果不存在就先release掉之前得那个对象。比如:
- (void)setBookName:(Book *)bookName
{
if(_bookName != bookName)
{
[_bookName release];
_bookName = [bookName retain];
}
}
如果是NSString类型的对象,NSString类型的对象的引用计数器里值非常大,而retain方法的作用就是把对象中的引用计数器+1,而对于NSString类型的对象是没用的,把retain换成copy比较好,比如:
- (void)setBookName:(NSString *)bookName
{
if(_bookName != bookName)
{
[_bookName release];
_bookName = [bookName copy];
}
}
然而在Xcode中有利用@property关键字来修饰属性就可以自动生成setter和getter方法,不需要我们自己再去给一个一个的属性写setter和getter方法了。@property的语法:@property(参数列表) (属性类型) 去掉下划线的属性名;
其中@property的参数中同一组的参数最多只能出现1个,其中atomic与nonatomic是一组,推荐nonatomic因为nonatomic运行的效率比较高;retain、strong、copy、assign是同一组,OC对象在MRC模式下用retain,在ARC模式下用strong,如果是NSString类型对象用copy,使用retain、strong、copy这三个参数产生的是标准的setter方法,基本数据类型不管是MRC模式还是ARC模式下都用assign,使用assign是在setter方法中直接给属性赋值,默认值是assign;readwrite与readonly是同一组,readwrite是同时生成setter和getter方法,而readonly是只生成getter方法,默认readwrite。

2)继承是子类可以继承父类里的所有属性和方法,也就是说如果B类继承A类,A类里的所有的属性和方法,在B类中不需要重新定义,直接就可以使用A类中的属性和方法。如果子类在有父类的属性和方法的基础上想拥有一些父类没有的属性和方法,可以自己定义,但是子类中自己定义的属性和方法,在父类中不可以使用。继承的语法如下:
@interface 儿子类的类名 : 父亲类的类名
{
属性
}
方法的声明
@end

@implementation 儿子类名
方法的实现.
@end

这个时候,儿子类就拥有了父亲类中定义的所有的成员.
几个术语.
@interface Student : Person
Student类从Person类继承. Student是Person的子类 Person是Student的父类.
Student类从Person类派生. Student类是Person类的派生类. Person类是Student类的基类.
继承是有单根性,也就是一个类只能继承一个类,但是类也有传递性,当A类继承自B类.B类又继承自C类.那么这个时候A类同时拥有B、C类中的成员
在新添加类模块的时候.有个选项 指定父类的名称。
需要注意的一个问题,可以定义一个父类的指针指向子类对象,但是这个时候这个对象不能调用子类自己定义的方法,并且也不能使用子类自己定义的属性,如果在子类中改写了父类的方法,调用这个方法是调用的是已经改写的那个方法。可以定义一个子类的指针指向父类对象,会报个警告,不会报错,但是这个时候这个对象不能调用子类的方法,并且不能使用子类自己定义的属性,如果在子类中改写了父类的方法,调用这个方法是调用的是在父类中没被改写的那个方法。

3)多态就是在子类中重新父类的方法,比如找三个人过来,这三个人中一个是理发师,第二个是医生,第三个是演员,那么让这三个人执行cut这个操作是,理发师执行的是剪头发,医生执行的是动手术,演员执行的是停止表演。同一个事情表现出多种形态,就是多态。简单的说,多态就是子类重写方法,当父类指针指向子类对象的时候. 调用多个对象的方法,而这些方法是被子类重写了的,那么这个时候,不同的子类对象对于同1个方法是具有完全不同的表现形式.在子类中重写方法不需要重新声明。

时间: 2024-10-06 00:07:18

面向对象的三大特征的相关文章

php面向对象的三大特征

1.面向对象的三大特征:封装.继承.多态.(抽象(扩展的))2.00A:分析,OOD:设计,OOP:编程.3.封装:信息隐蔽,封装,所有的函数和方法,类中的属性和行为也是封装. 三个访问修饰符public.protected.private也是封装.4.public 公共的 谁都可以用,也可以修改:protected 受保护的 只有自己和后代可以使用和修改: private 私有的 只有自己可以使用和修改:5.继承: 扩展父类的内容,注意只能继承public和protected修饰的内容,而pr

黑马程序员--Objective-C之--OC面向对象的三大特征

OC面向对象的三大特征是封装.继承和多态. OC语言也支持面向对象的三大特征,OC提供了@private.@package.@protected.@public等访问控制符来实现封装 OC也允许子类来继承父类,并且支持多态. 一.封装 封装指的是將对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法对内部信息的操作和访问. OC的封装特性需要通过使用访问控制符来实现. (一).访问控制符 1.@private:当前类访问权限.如果类的成员变量使用@priva

面向对象的三大特征——封装、继承、多态

接触过面向对象的人都知道面向对象有三大特征,分别是封装.继承和多态.这三者分别指的是什么,为什么是这哥仨,使用他们有什么好处,我们来梳理一下. 封装 原则:隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处: ①将变化隔离. ②便于使用. ③提高重用性. ④提高安全性. Demo1: 比如一个学生类:他具有姓名和年龄两个属性,但是为了提高安全性和重用性,便于使用,我们将其封装起来. public class Student { private String name; private in

解析PHP面向对象的三大特征

class BenHang extends Card{ /*构造函数与及构造的继承*/ function __construct($cardno,$pwd, $name,$money){ parent::__construct($cardno,$pwd, $name,$money); } function take($money){ echo "本行取款{$money}没有手续费·····<br>"; } function zhuan($money){ echo "

聊一聊面向对象的三大特征

学习Java语言程序设计也有一段时间了.现在我想对封装.继承和多态,在Java中面向对象的三大特征,总结一下我的理解,不妥当的地方望大家包涵.  封装.给我的感觉封装就是一个包装,一个代码是否健壮,与用不用封装有很大的关系,封装就像是包裹一个礼物,不仅让礼物看起来更加精美,而且还完善了内容.请看代码: class Person {     private String name;     private int age;     public void say() {         Syste

7 面向对象的三大特征

面向对象的三大特征为:封装.继承.多态. 1 封装(encapsulation) 1.1  广义上的封装就是包装,可以将方法看作是对为完成特定功能的代码的封装,可以把类看作对属性和方法的封装.... 狭义上的封装:将属性私有化,然后提供公有的getter和setter方法以供访问. 封装的优点: 1)隐藏了实现细节,简化开发  2)安全  3)提高了代码的可维护性和可扩展性. 步骤: 1)将属性私有化,将修饰符修改private的 2)提供公有的访问方法:getter方法:取值,setter方法

Java面向对象的三大特征

Java面向对象的三大特征: 封装.继承.多态 封装和继承几乎都是为多态而准备的 一.      封装 首先,属性能够描述事物的特征,方法能够描述事物的动作.封装就是把同一类事物的共性(包括属性和方法)归到同一类中,方便使用. 封装:封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保留一些接口使其与外界发生联系.也就是说用户无需知道内部的数据和方法的具体实现细节,只需根据留在外部的接口进行操作就行.

OC面向对象的三大特征

OC面向对象的三大特征 1.OC面向对象的三大特封装 1)封装:完整的说是成员变量的封装. 2)在成语方法里面的成员变量最好不要使用@public这样会直接暴露在外面被别人随随便便修改,封装的方法还可以达到过滤无效数据的作用. 3)对成员变量只读(readonly):只允许外界访问我的no,不允许外界修改我,只需要提供get方法. 4)对成员变量只写:不允许外界访问我的no,只允许外界修改我,只需要提供set方法. set 方法的注意点: 作用: 提供一个方法给外界设置成员变量值,可以在方法里面

面向对象的三大特征——全网最详解析

面向对象的三大特征--封装性.继承性.多态性 类的封装性 封装是将数据以及对数据的操作组合起来构成类,类是一个不可分割的独立单位.类中提供与外部联系的方法,又尽可能隐藏类的实现细 节. 封装性提供一种软件模块化的设计思想,像组装硬件一样.类的设计者提供标准化的软件模块,使用者根据实际需求选择所需要的类模块, 集成为软件系统,各模块之间通过传递参数等方式进行工作.设计者需要考虑类的定义.类中数据和方法的访问权限以及方法如何实现等问题: 使用者需知道有哪些类,每个类的特点,每个类提供了哪些常量.成员

面向过程、面向对象及面向对象的三大特征

面向过程:procedure oriented programming POP 面向对象:object oriented programming OOP 了解面向对象,我们来了解一下面向对象中的核心概念类和对象 类:类是对某一类事物的描述,是抽象的.概念上的定义. 对象:现实世界中客观存在的事务就称为对象.在java中,万物皆对象,对象是用来描述客观事物的一个实体,由一组属性和方法构成. 类与对象的关系:类是多个对象进行综合抽象的结果,是实体对象的概念模型,而一个对象是一个类的实例. 面向过程到