一、基本知识
含义:它是用来创建具有相似属性和行为的对象的一个模板或蓝图。类定义了对象的属性(成员变量)和行为(成员函数),并通过创建对象来实例化类。对象是具有类类型的变量
类与对象的关系:(1)类是对象的抽象,而对象是类的剧吐实例
(2)类是抽象的,不占用内存,而对象是具体的,占用存储空间
(3)类是用于创建对象的规划,抽象
二、类
1-1.类
用关键字class来定义类,类中的成员个数可以是0-n个:可以放的有字段(属性)、方法(函数)
格式:添加可选属性方法和前面一样的用“?“
81行:创建一个类
82-83:添加属性name、color类型都为string
84:添加属性age并给age赋初始值
85:构造函数:用于初始化对象的属性,而构造函数里面的成员用于定义对象的行为
86-88中的this是下面的Cat中传入的值
91:创建一个对象cat
92:打印cat
三、对象和内存
-
new多次本质上是创建了多个了对象, 只有创建了对象,才能使用对象访问对象的字段或方法;
-
对象在堆中,计算机堆中内存无名字,只能通过地址使用之,堆中对象地址通过hash后得到引用值,引用类型变量保存的就是引用值;
-
每个对象都有唯一引用, 只能通过对象的引用使用对象, new 会返回对象的引用(this);
-
当类中定义了属性,该类的每个对象都会独立开辟出属性成员,当前对象独享;
-
创建对象时,方法不会被开辟出来,同一个类的方法被所有该类对象共用(原型和原型链);
-
同一对象可被多个变量引用,当一个对象没有引用时,对象的生命就被GC(拉圾回收机制)管理了, 当对象销毁时,对象中独享的字段成员也会随之销毁;
-
只有类不能做事情,类的对象才有用, 类成员(静态成员例外)
四、this:和js中的this用法一样,谁调用,this就指向谁
五、构造函数(constructor)
含义:构造函数是类中的一种特殊方法,它在创建类的实例时自动调用,用于初始化对象的属性和执行其他必要的操作。可以有0-n个参数,构造函数没有返回值,也不用声明返回值类型
六、静态方法
含义:使用 static 修饰符修饰的方法称为静态方法,它们不需要实例化,而是直接通过类名来调用。
七、存取器
含义:允许我们通过 getter 和 setter 方法来控制对类属性的访问和赋值操作
格式:
八、继承(extends)
含义;将公共部分封装到一个类中,要使用的时候直接用extends来即可
格式:
class animal {
name: string
age: number
}
class dog extend animal{//此时dog类中在有了play着一个属性的同时,还拥有了animal类中的所有属性
play: boolean
}
注:1.子类先执行,在执行子类的过程中运行父类
2.一个子类只能继承一个父亲,而一个类可以有多个子类。子类也可以作为别的类的父类
3.子类继承父类后并不影响父类的使用
4.子类对象可以访问从直接父类或间接父类继承下来的成员(父母的父母的父母。。。。)
九、super
含义:用于访问父类(基类)的方法和属性的关键字
与this相比:super(范围小一些)主要访问父类对象,this(范围打一下)访问子类对象,也可以访问父类对象。通常用this来访问数据,super修改父类成员。
- 如果派生类(自己创建的类)没有自己的构造函数,则会使用默认的构造函数,并在其中隐式调用父类的构造函数。
- 如果派生类具有自己的构造函数,则必须在派生类的构造函数中使用
super()
来调用父类的构造函数。若父类里面什么也没有,子类的构造函数中也必须使用super() - 在构造函数中使用
super()
调用父类的构造函数时,必须确保它是构造函数中的第一条语句。
十、访问权限修饰符
修饰符分类:public(公用的)、protected(受保护的)、private(私有的)
修饰符 | 当前内部 | 子类内部 | 对象 | |
public | 可以 | 可以 | 可以 | |
protected | 可以 | 可以 | 不可以 | |
private | 可以 | 不可以 | 不可以 |
1.public(公用的)
含义:被public修饰的成员(字段和方法)在任何地方都能被访问
2.protected(受保护的)
含义:被修饰的成员可以在所属类内部和子类中能被访问,在外部(对象)无法访问。
3.private(私有的)
含义:被修饰的成员只能在该成员所属类内部被访问,在外部无法访问。