//创建Person类
class Person {
//构造器方法
constructor(name,age){
//构造器中this指向类的实例对象
this.name = name
this.age = age
}
speak(){
//speak方法再类的原型对象上,供实例使用
console.log(`我是${this.name},我今年${this.age}岁`)
}
}
const p1 = new Person('张三',18)
const p2 = new Person('李四',19)
console.log(p1)
console.log(p1)
p1.speak()
//继承
//创建一个Student类,继承自Person类
class Student extends Person {
constructor(name,age,grade){
super(name,age)
this.grade = grade
}
//重写继承自父类的方法
speak(){
//speak方法在Student类的原型链上
console.log(`我是${this.name},我今年${this.age}岁,我上${this.grade}`)
}
study(){
//study方法在原型对象上
console.log(`我在学Class`)
}
}
const s1 = new Student('张三',18,'三年级')
console.log(s1)
s1.speak()
s1.study()
static
:静态属性
- 使用静态属性无需创建实例,通过类即可直接使用
- static只能通过
类
直接获取,或者通过实例的constructor
属性间接获取
readonly
:只读属性
- 如果在声明属性时添加一个readonly,则属性便成了只读属性无法修改
三种修饰符:
public
(默认值):共有属性,可以在类、子类和对象中读取、修改protected
:保护属性,可以在类、子类中读取、修改private
:私有属性,可以在类中修改
class Person{
static name: string; // 静态属性
readonly age: number; // 只读属性
protected sex: '男'|'女'; // 保护属性
private _gender: string; // 私有属性
constructor(name: string, age: number, sex:'男'|'女', gender: string){
this.name = name;
this.age = age;
this.sex = sex;
this._gender = gender;
}
get gender(){
return this._gender;
}
set gender(gender: string){
this._gender = gender;
}
}
class student{
constructor(name: string, age: number, sex:'男'|'女', gender: string){
super(name, age, sex, gender)
console.log(this.sex) // 可以获取
console.log(this.gender) // 不可获取
}
}
const p1 = new Person('张三', 18, '男', '三年级');
console.log(Person.name,p1.constructor) // static属性只能通过类或者实例的constructor访问
console.log(p1.age) // readonly 只可读不可写
// console.log(p1.sex) // protected 不可直接修改
// console.log(p1._gender) // private 不可直接获取
// p1._gender = '李四' // private 不可直接修改
console.log(p1.gender) // 通过getter读取私有属性
p1.gender = '李四' // 通过setter修改私有属性
抽象类
抽象类
是专门用来被其他类所继承的类,不能创建实例,只能被继承
- 使用
abstract
开头的方法叫做抽象方法,抽象方法没有方法体只能定义在抽象类中,继承抽象类时抽象方法必须要实现 - 抽象方法相当于
多态
(每个实例的该方法都由子类实现)
// 抽象类,不能创建实例,只能被继承
abstract class Animal{
// 抽象方法,没有函数体
// void 定义一个无返回值的方法
abstract run(): void;
bark(){
console.log('动物在叫~');
}
}
class Dog extends Animals{
run(){
console.log('狗在跑~');
}
}