使用class关键字定义一个类
/*
* 对象中主要包含了两个部分:
* 属性
* 方法
*/
class Person{
/*
* 直接定义的属性是实例属性,需要通过对象的实例访问:
* const per = new Person();
* per.name
/*
// 定义实例属性
name:string = 'tom';
age:number = 12
// 在属性前使用static关键字可以定义类属性(静态属性)
访问使用Person.age
static age:number = 12;
// 定义方法
/*
*如果方法以static开拓则方式是类方法,可以直接通过类去调用
*/
sayHello(){
console.log('你好')
}
}
const per = new Person()
// 访问实例属性
console.log(per.name) // tom
// 访问静态属性
console.log(Person.age) // 12
// 实例属性可以修改
per.name = 'suddy'
console.log(per.name) // suddy
类的继承
// 立即执行函数
(function (){
// 定义一个类
class Dog{
name:string;
age:number;
constructor(name:string,age:number){
this.name = name ;
this.age = age;
}
sayHello(){
console.log('你好')
}
}
// 定义一个类
class Cat{
name:string;
age:number;
constructor(name:string,age:number){
this.name = name;
thia.age = age;
}
asyHello(){
console.log('你好啊')
}
}
})();
综上:发现两个类有公共的属性和方法,可以合并为一个 如下:
class Animal{
name:string;
age:number;
constructor(name:string,age:number){
this.name = name;
thia.age = age;
}
asyHello(){
console.log('语言')
}
}
// Dog继承
/*
* - Animal被称为父类,Dog被称为子类
* - 使用继承后,子类将会拥有父类所有的方法和属性
* - 通过继承可以将多个类中共有的代码写在一个父类中
* - 这样只需要写一个即可让所有的子类都同时拥用父类的属性和方法
* - 如果希望在子类中添加一些父类中没有的属性或方法直接添加即可
* - 如果在之类中添加了和父类相同的方法,则子类方法会覆盖掉父类的方法
* - 这种子类覆盖掉父类方法的形式,称为方法重写
*/
class Dog extends Animal{
run(){
console.log('${this.name} + 在跑')
}
sayHello(){
console.log('hello')
}
}
console.log(dog.run())
抽象类
/*
* - 以abstract开头的类是抽象类
* - 抽象类和其他类区别不大,只是不能用来创建对象
* - 抽象类就是专门用来被继承的类
* - 抽象类可以添加抽象方法
*/
abstract class Animal{
// 定义一个抽象方法
// 抽象方法使用abstract开头,没有方法体
// 抽象方法只能定义在抽象类中,子类必须对抽象方法进行重写
abstract sayHello():void;
}
class Dog extends Animal{
}
const an = new Animal()