类
class Person{
/*
* 直接定义的属性是实例属性,需要通过对象的实例去访问
* const per = new Person();
* per.name
*
* 使用 static 开头的属性是静态属性(类属性),可以直接通过类去访问
* Person.age
*
* readonly 开头的属性是只读的属性,修改会报错
* */
// name:string = 'ju'
name = 'ju'
// static age : number = 18;
age = 18;
// 定义方法
/*
如果方法以static开头 则方法就是类方法,可以直接通过类去调用
*/
sayhi(){
console.log("你好")
}
}
const per = new Person()
console.log(per.name)
构造函数 和 this
class Cat{
name:string;
age:number;
// constructor被称为构造函数
// 构造函数会在对象创建时调用
constructor(name:string,age:number){
// 在实例方法中,this就表示当前的实例
// 在构造函数中当前对象就是当前新建的那个对象
// 可以通过this向新建的对象中添加属性
//谁调用this,this就是谁
this.name = name,
this.age = age
}
sayhi(){
console.log("hi")
}
}
const cat = new Cat("ju",1);
const cat1 = new Cat("en",12)
console.log(cat)
console.log(cat1)
继承
class Animal{
name:string;
age:number;
constructor(name:string,age:number){
this.name = name;
this.age = age;
}
sayhello(){
console.log("谁?hello")
}
}
// 使用继承后 父类将拥有父类所有的属性和方法
// 通过继承可以将多个子类中共有的代码写在一个父类中,这样只需要写一次即可让所有的子类都同时拥有父类中的属性和方法
//如果希望在子类中添加一些父类中没有的属性和方法,直接加就行.
//如果在子类中添加了和父类相同的方法,则子类会覆盖掉父类的
class Dog extends Animal{
}
class Cat extends Animal{
}
let dog = new Dog("小白",6)
let cat = new Cat("旺财",3)
// console.log(cat)
console.log(dog)
super关键字
class Animal{
name:string;
age:number;
constructor(name:string,age:number){
this.name = name;
this.age = age;
}
sayhello(){
console.log("谁?hello")
}
}
// 使用继承后 父类将拥有父类所有的属性和方法
// 通过继承可以将多个子类中共有的代码写在一个父类中,这样只需要写一次即可让所有的子类都同时拥有父类中的属性和方法
class Dog extends Animal{
sex:string;
sayhello(){
// 在类的方法中,super 就表示当前类的父类
// super.sayhello()
}
constructor(name:string,age:number,sex:string){
// 如果在子类中写了构造函数,就相当于覆盖掉了父类的赋值。不会再执行父类的构造函数,所以必须用super
super(name,age) //调用父类的构造函数,必须这样做
this.sex = sex
}
}
let dog = new Dog("小白",6,"女")
dog.sayhello()
抽象类
abstract class Animal{
name:string;
age:number;
constructor(name:string,age:number){
this.name = name;
this.age = age;
}
// 定义一个抽象方法
// 抽象方法使用abstract 开头,没有方法体
// 抽象方法只能定义在抽象类中,子类必须对抽象方法进行重写
// 抽象类就是一个让子类去继承的类,它没有办法实例创建对象,它里边可以添加抽象方法,抽象方法只能添加在抽象类里
abstract sayhello();void
}
// 使用继承后 父类将拥有父类所有的属性和方法
// 通过继承可以将多个子类中共有的代码写在一个父类中,这样只需要写一次即可让所有的子类都同时拥有父类中的属性和方法
class Dog extends Animal{
sayhello(){
console.log("hello")
}
}
let dog = new Dog("小白",6)
dog.sayhello()