类
类是对对象的一个抽象,对象中主要包含两个部分,属性和方法。
1、属性
- 实例属性
- 静态属性
- 只读属性
typescript
class Person{
// 实例属性
name:string = '李四';
// readonly 开头的属性表示的是一个只读的属性
readonly age:number = 22;
// 在属性前使用static关键字可以定义类属性(静态属性)
// 静态属性也就是不用new就可以直接使用的属性
static hi:string = 'hello';
}2、方法
typescript
class Person{
name:string = '李四';
readonly age:number = 22;
static hi:string = 'hello';
// 实例方法
sayName(){
console.log(this.name)
}
// 类方法
static sayName(){
console.log("hello")
}
}
const p = new Person( )
p.sayName()
Person.sayName()3、constructor
在new的时候,构造函数会被调用。
typescript
class Dog{
name:string;
age:number;
// constructor 被称为构造函数,构造函数会在对象创建时调用
constructor(name,age) {
// console.log("构造函数执行了")
// 在实例方法中,this就表示当前实例
this.name = name;
this.age = age
}
bark(){
alert("汪汪汪!")
}
}
const dog = new Dog("李四",22)
console.log(dog);4、继承
通过继承我们可以将多个类中共有的方法和属性写在一个父类当中。这样我们只需要写一次,就可以让所有子类都拥有了父类的属性和方法。
- 如果在子类中添加了和父类中相同的方法,子类中的方法会覆盖父类中的方法。
typescript
class Animal{
name:string;
age:number;
// constructor 被称为构造函数,构造函数会在对象创建时调用
constructor(name,age) {
// console.log("构造函数执行了")
// 在实例方法中,this就表示当前实例
this.name = name;
this.age = age
}
bark(){
alert("汪汪汪!")
}
}
// 定义一个狗的类,使Dog类继承Animal类
// - 此时 Animal被称为父类,Dog被称为子类
// - 使用继承后,子类将会拥有父类的所有属性和方法
class Dog extends Animal{
// 给子类单独添加方法
sayDog(){
console.log(this.name)
}
}
const dog = new Dog("旺财",2)
console.log(dog);
dog.sayDog()5.super
super 表示当前类的父类。
typescript
class Animal{
name:string;
constructor(name:string) {
this.name = name
}
sayHello(){
console.log("动物在叫")
}
}
class Dog extends Animal{
age:number;
constructor(name:string,age:number) {
//如果在子类中写了构造函数,在子类的构造函数必须对父类的构造函数
//进行调用
//因为此处的constructor会重写父类中的constructor
super(name);
this.age = age
}
sayHello() {
//在类的方法中 super 就表示当前类的父类
// super.sayHello();
console.log("www!")
}
}
const dog = new Dog("旺财",22)
dog.sayHello()
console.log(dog);6.抽象类
在 class 前面加上 abstract 表示该类是抽象类,只能用来继承,不能用来创建对象。
typescript
abstract class Animal{
name:string;
constructor(name:string) {
this.name = name
}
sayHello(){
console.log("动物在叫")
}
}7.抽象方法
typescript
abstract class Animal{
name:string;
constructor(name:string) {
this.name = name
}
// 定义一个抽象方法,并且没有方法体
abstract sayHello():void;
}
class Cat extends Animal{
// 抽象方法只能定义在抽象类当中,子类必须对抽象方法进行重写
sayHello() {
console.log('喵喵喵')
}
}
const cat = new Cat("花花")
console.log(cat);
cat.sayHello() //喵喵喵