一.类和对象

1.接口部分:对外声明类的行为和特征(类的定义分为:接口部分和实现部分)

① @interface 接口关键字:用于表示这是一个类的接口部分

接口部分功能:是定义类的静态特征和声明动态行为

@end 作为结束标志

对外接口:通过接口就可以在不知道实现的情况下,了解这个类有什么

Person:类名,每一个类都要起一个名字。首字母大写(类:对象的类型)

NSObject:父类

@interface Person: NSObject

②静态特征:实例变量

③实例变量必须在花括号中

④创建实例变量的时候不能被赋值

⑤在创建实例变量的时候,实例变量钱加“_”:系统这样写;区分;

{

⑤实例变量的可见度

《1》内部:类的实现部分使用实例变量

《2》外部:不在实现部分使用

《3》@public范围:外部、内部、继承

《4》@protected(系统默认)范围:内部、继承

《5》@private范围:内部

//添加当前类属性

@public//作用范围是直到下一个结束或者实例变量结束

NSString *_name;

NSInteger _age;

@protected

CGFloat _height;

@private

CGFloat _weight;

}

//动态行为:方法(添加类的行为)

- (void)sayHi;

@end

2.实现部分:类行为的具体实现(方法的实现)

①@implementation:关键字,表示类的实现部分

Person:类名,表示实现的是哪个类

@end:类 结束实现标志

@implementation Person

- (void)sayHi{

NSLog(@“Hello World”);

}

@end

3.使用类创建对象。Objective-C中创建的对象,全部放在堆区(对象:类的实例)

int main(){

@autoreleasepool{

①申请空间

保存空间地址

《1》内存分配 (alloc方法:用于分配内存空间)

Person *p = [Person alloc];

《2》对象初始化(init方法:用于初始化对象),将内存空间数据清零

p = [p init];

《3》将创建对象的《1》和《2》合成一步

Person *p1 = [[Person alloc] init];

②使用成员变量

p1->_age = 10;

p1->_name = @“贝爷”;

③使用方法

[p1 sayHi];

}

return 0;

}

4.类是对一类具有相同事物行为和特征事物的抽象

5.封装、继承、多态

①封装:将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内

②继承:子类自动共享父类数据结构和方法的机制,这是类之间的一种关系

③多态:指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果

[email protected]的作用:只是表示有Girl这么一个类型,其他的什么都没做。在什么地方使用Girl这个类时,再导入Girl.h

注意:我们一般选择在.h中使用@class,在.m中引入头文件

7.组合类的使用:(指针存储对象的首地址,代指对象。OC中使用指针代指对象,进行操作)

①Mother.h

#import <Foundation/Foundation.h>

@interface Mother : NSObject
{
    @public
    NSString *_name;
}

@end

②Father.h

#import <Foundation/Foundation.h>

@interface Father : NSObject
{
    @public
    NSString *_name;
}

@end

③Child.h

#import <Foundation/Foundation.h>

@interface Child : NSObject
{
    @public
    NSString *_name;
}

@end

④Family.h

#import <Foundation/Foundation.h>

#class Father;

#class Mother;

#class Child;

@interface Family : NSObject
{
@public
    Father *_f;
    Mother *_m;
    Child  *_c;
}

@end

⑤main.m

Father *father = [[Father alloc]init];
        father->_name = @"父亲";
        Mother *mother = [[Mother alloc] init];
        mother->_name = @"母亲";
        Child *child = [[Child alloc] init];
        child->_name = @"孩子";
        Family *family = [[Family alloc] init];
        family->_f = father;
        family->_m = mother;
        family->_c = child;

NSLog(@"%@ %@ %@ ",family->_f->_name,family->_m->_name,family->_c->_name);

8.打印字符串用“%@”做占位符。用”[]”调用方法

有打印,没有控制台输入

9.

①面向过程:编程以事件(任务)为中心,程序围绕事件,列出了事件的每个步骤,一步一步完成(侧重点:实现功能 C)

②面向对象:编程以事物为中心,程序围绕事物展开,完成事件只是一个小任务(侧重点:对象的特征 OC,C++,java)

10.Objective-C中的几种方法

①“-”实例方法:由类的实例来执行。换言之,在调用实例方法之前,必须先创建该类的实例。实例方法是最常见的方法类型(方法只能对象使用)

示例:- (instancetype)init;

// 有参(1个参)无返回值
// 冒号属于方法名的一部分
// 方法名:printNum:
- (void)printNum:(NSInteger)num;
// 有两个参数
// 方法名:printName:age:
- (void)printName:(NSString *)name age:(NSInteger)age;

//有三个参数
//方法名:printName:age:score:

- (void)printName:(NSString *)name age:(NSInteger)age score:(CGFloat)score;

②“+”类方法:可由它所在的类直接执行。它不需要对象的实例作为消息的接收者(方法只能被类使用)

示例:+ (instancetype)alloc;

注:类方法中不能使用实例变量

11.instancetype和id区别

①instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型对象。

②instancetype只能作为返回值和参数,id还可以用来定义变量

③instancetype会告诉编译器当前的类型,但id对编译器却是无类型的,调用任何方法不会给出错误提示

④对于init方法,id和instancetype是没有区别的。因为编译器会把id优化成instancetype。当明确返回的类型就是当前class时,使用instancetype能避免id带来的编译不出错误的情况。

12.如何获取方法名

①删除:类型标识,返回类型,参数类型,参数名,空格。

示例:replaceObjectAtIndex:withObject

注意:类中不能出现同名方法;“:”标识参数,不能省略。有冒号必须有参数;冒号属于方法名的一部分。

13.在OC中使用消息发送机制:[receiver message]

表述:①给receiver对象发送message消息②receiver接收到消息,即方法getSalary③receiver找到message方法,并执行

14.setter和getter方法

①在OC中,为单一实例变量赋值的方法称作setter(设置器)

②获取单一实例变量值得方法称作getter(访问器)

15.setter和getter方法的书写格式

给实例变量:NSInteger _age;

①setter的书写格式:- (void)setAge:(NSInteger)age;

即set+首字母大写的实例变量名(忽略下划线)

②getter的书写格式:- (NSInteger)age;

j即返回值类型与变量类型一致,方法名与实例变量名相同(忽略下划线)

16.setter和getter与实例变量的关系

①无论setter还是getter内部操作的是实例变量

②每一个实例变量都需要一对setter和getter方法

17.setter和getter的实际操作

①Person.h

#import <Foundation/Foundation.h>

//类的接口部分
/*
 1.定义一个类
 2.添加当前类属性(特征)
 3.添加当前类行为(方法)
 */
@interface Person : NSObject
{
    //大括号内部,添加当前类属性
    //字符串类型
    NSString *name;//姓名,NSString同样是一个类
    //整型
    NSInteger age;//年龄,NSInteger是数值类型,不是一种类
    //字符串类型
    NSString *gender;//性别
}
//初始化方法
//希望通过初始化方法,能够获得一个Person类的实例对象,并且希望该对象具有自己的姓名属性
- (id)initWithName:(NSString *)_name;

//大括号外部,添加当前类行为
- (void)sayHi;

//设置器 setter
- (void)setName:(NSString *)_name;
- (void)setAge:(NSInteger)_age;
- (void)setGender:(NSString *)_gender;

//访问器 getter
- (NSString *)getName;
- (NSInteger)getAge;
- (NSString *)getGender;

@end

②Person.m

#import "Person.h"

@implementation Person

- (id)initWithName:(NSString *)_name{

//1.原始初始化,也就是将内存内的变量置零
    self = [super init];//将init方法发送给super对象
    //2.原始初始化成功之后,需要设置当前对象的姓名为形参
    if (self != nil) {
        name = _name;
    }
    //3.返回当前对象
    return self;
}

//大括号外部,添加当前类行为
- (void)sayHi{
   
    //NSLog将字符串打印在控制台进行输出,类似于printf();
    NSLog(@"hello world");
}

//设置器 setter
- (void)setName:(NSString *)_name{
    //设置给当前对象的属性
    name = _name;
}
- (void)setAge:(NSInteger)_age{
    age = _age;
}
- (void)setGender:(NSString *)_gender{
    gender = _gender;
}

//访问器 getter
- (NSString *)getName{
    //访问当前对象的属性
    return name;
}
- (NSInteger)getAge{
    return age;
}
- (NSString *)getGender{
    return gender;
}

@end

③main.m

#import <Foundation/Foundation.h>
#import "Person.h"//引入类名字

int main(int argc, const char * argv[]) {

//1.创建Person类的实例对象
    Person *person = [[Person alloc] initWithName:@"Lewis"];//用【】调用方法
    //2.给person发送实例消息sayHi
    [person sayHi];
   
    //修改name,添加设置器(setter)与访问器(getter)
    /*
     类名    属性名  设置器方法名 访问器方法名
     Person  name  -setName:   -getName
     */
   
    //3.先打印当前person实例对象的姓名是什么
    NSLog(@"person‘s name is %@",[person getName]);
   
    //4.修改当前person实例对象的姓名,修改成jack
    [person setName:@"Jack"];
    NSLog(@"person‘s name is %@",[person getName]);

}

18.点语法(只对getter setter有效)

s.name = @"小白";

NSLog(@"%@",s.name);

[s setAge:12];

NSLog(@"%ld",[s age]);

s.score = 99.99;

NSLog(@"%.2f",s.score);

时间: 2024-12-23 02:11:53

一.类和对象的相关文章

Java 第七章 类和对象 笔记

一.对象的特征--类的属性 每个对象的每个属性都有特定的值 对象的操作--类的方法 二.封装:对象同时具有属性和方法两项特性.     对象的属性和方法通常被封装在一起,共同体现事物的特性,     二者相辅相成,不能分割. 三.类和对象的区别:     类:抽象的概念,是一个模子,确定了对象的属性和方法.    对象:能够看得见摸得着的实物.具有静态和动态特征. 四.定义类的步骤:     1.定义类名      2.定义类的属性 访问修饰符 属性类型 属性名称=默认值:     3.定义类的

类与对象

1.1 类和对象的关系   为什么要采用面向对象思想进行程序设计与开发 1.可以实现代码的复用 2.符合人思考的方式   类和对象的定义 1.类的定义:用class关键修饰的叫做类 2.对象的定义:类名定义的数据类型   类和对象之间关系 1.由对象归纳为类,是归纳对象共性的过程 2.在类的基础上,将状态和行为实体化为对象的过程为实例化   1.2 定义类   定义类的语法,类主要由成员变量和成员方法构成(暂不提构造函数) eg: publicclassStudent { //成员变量 intn

【编程语言】Java中的类和对象learn by Imooc

 一.什么是类和对象 * 类是模子,确定对象将会拥有的特征(属性)和方法 * 类的特点: *     类是对象的类型 *     具有相同属性和方法的一组对象的集合 * 对象的属性 *     属性-对象具有的各种特征 *     每个对象的每个属性都有用的特定值 * 对象的方法 *     方法-对象执行的操作(能干什么) * 类和对象的关系 *     类是抽象的概念,仅仅是模板 *     对象是一个你能够看得到,摸得着的具体实体 二. 如何定义Java的类 * 1.类的重要性:所有Jav

C++ 成员变量是别的类的对象

?在成员函数中,可以将this指针当参数传递,也可以返回this指针,或返回通过this指针拿到的对象 /* 成员变量是别的类的对象 */ #include <iostream> using namespace std; //日期类 class Date { int year,month,day; public: //构造方法 Date(){ cout << "Date() " << endl; } //有参 Date(int _y,int _m,i

l类与对象课后作业

java 的初始化规律 执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”. 执行类的构造函数. 类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行.因此,适合于封装那些“对象创建时必须执行的代码” 当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行. 请自行编写示例代码验证以上结论. public class InitializeBlockDemo { /**   * @param args   */ public static vo

第五节 类和对象

面向对象怎么理解? 1.1 面向对象是相对面向过程而言 1.2 面向对象和面向过程都是一种思想 1.3 面向过程:强调的是功能行为 1.4 面向对象:将功能封装进对象,强调具备了功能的对象 1.5 面向对象是基于面向过程的 特点: 三个特征:封装.继承.多态 我们在开发过程中,就是在找对象进行使用,没有对象就new一个对象. 找对象:建立对象,使用对象,维护对象的关系 封装: (1)是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (2)好处:将变化隔离:便于使用:提供重用性:提高安全性

C++笔记二:类和对象

类和对象 1:面向对象基础 2: 定义类和对象 3: 类和对象的使用 4: 构造函数和析构函数 5: this指针和复制构造函数 6: static静态成员 7: const对象和const成员 8: friend友元 ---------------------------------------------------------------------------------------------------------------------- (1)面向对象基础 一.什么是面向对象程序

类、对象和包

相关概念: 对象: 对象是存在的具体实体,具有明确定义的特征和行为. 类:是具有相同属性和行为的一组对象的集合.类是对象的抽象,对象是类的实例. 包:包就是文件夹.利用包可以可以组织相关的类,同时可以做到信息的隐藏. 属性:属性用于描述对象的特征.由于属性是属于一个对象的组成,所以属性也叫成员变量.属性跟随对象放在堆空间中,书写在类中,在方法之外,随对象产生而产生,随对象销毁而销毁.特点:属性用于描述对象的特征,对象之间彼此独立,一个对象属性的变化不会影响其他对象属性的变化.属性通过对象. 的方

8.python之面相对象part.1(初识类与对象)

一.类和对象的概念. 什么是类 类就是把一类事物相同的特征和动作整合到一起就是类比如说"人"就是一个类. 什么是对象 对象就是基于类创建出来的一个具体存在的事物这个事物包含了将其创造出来的类的特征和动作. 类与对象有什么关系一切的对象都是由类产生的假如说造一支笔首先要有一个造笔的模版上帝制造人也是一样制造一个人也需要一个造人的模版这个模板就是人的"类"然后根据类的定义来产生一支支笔和一个个的人. 什么是实例化 由类产生对象的过程就是实例化类实例化的结果就是一个对象对

Java —类和对象

类和对象 类是对象的类型,是具有相同的属性和方法的一组对象的集合. 定义类 访问修饰符 class 类名 { 数据类型 属性名: 访问修饰符 返回值类型 方法名 {} } 创建对象:类名 对象名 = new 类名(); 使用对象:引用对象的属性:对象名.属性名;引用对象的方法:对象名.方法名(); 可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立. 成员变量和局部变量 成员变量:在类中定义,描述对象将要有什么.可以在本类的方法或其他类的方法中使用.java会给成员变量一个初始