TypeScript ---- 面向对象

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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值