TypeScript-8 class中的构造函数 constructor 及类的继承

构造函数

一般我们一个类会创建多个对象,并且希望这些对象的属性各不相同,这时我们就用到了class中的构造函数 constructor

在构造函数中当前对象就是当前新建的那个对象,那么此时我们就可以通过this向新建的对象中添加不同的属性

eg:

class Dog{
    names:string;
    age:number;
    constructor(name:string,age:number){
        // 在实例方法中,this就表示当前实例
        // 在构造函数中当前对象就是当前新建的那个对象,那么此时我们就可以通过this向新建的对象中添加不同的属性
        console.log(this);
        this.names = name;
        this.age = age;
    }
    bark(){
        alert("汪汪")
    }
}
const dog1 =new Dog("旺财",2); 
const dog2 =new Dog("大黄",3); 
console.log(dog1,dog2)
dog1.bark();// Dog {names: '旺财', age: 2}
dog2.bark();// Dog {names: '大黄', age: 3}

类的继承

extends 继承 此时 被继承者 被称为父类 继承者被称为子类 ;

使用继承后,子类中将会拥有父类的所有属性和方法;

通过继承我们可以将多个类中共有的代码写在一个父类中,实现代码复用;

如果希望在子类中添加一些父类中没有的方法或属性,直接加就行;

如果在子类中添加了和父类相同的方法,则子类中的方法会覆盖掉父类中方法,这种形式我们称为方法重写;

在类方法中super就表示当前类的父类 super常用于在子类中添加父类中没有的属性;

若在子类中写了构造函数时,就必须对父类中的构造函数进行调用;

以abstract开头的类为抽象类,抽象类何其他类区别不大,只是不能用于创建对象,一般我们希望公共的父类只用于被子类继承而不是用父类创建对象,故父类一般都使用抽象类;

抽象类中可以添加抽象方法 只需在方法前添加 abstract 如:abstract say():any;

抽象方法只能定义在抽象类中,子类必须对抽象方法进行重写 !

eg:

abstract class Animal{
        name:string;
        type:string;
        say:string;
        constructor(name:string,type:string,say:string){
            this.name=name;
            this.type=type;
            this.say=say;
        }
        bark(){
            console.log(this.type+this.name+"在"+this.say+"叫")
        }
    }
   
    class Dog extends Animal{
        // 此处需要将父类所需参数再传一遍
        constructor(name:string,type:string,say:string,age:number){
            super(name,type,say)
        }
        run(){
            console.log(this.name + "在跑")
        }
        bark(){
            console.log("狗")//狗
        }
        
    }
    class Cat extends Animal{
        sleep(){
            console.log(this.name + "在睡觉")
        }
        bark(){
            super.bark();//小猫咪咪在喵喵叫
        }
    }
    const WC = new Dog("旺财","小狗","汪汪",2);
    const MM = new Cat("咪咪","小猫","喵喵");
    WC.bark();//小狗旺财在汪汪叫
    WC.run();//旺财在跑

    MM.bark();//小猫咪咪在喵喵叫
    MM.sleep();//咪咪在睡觉

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阁下何不同风起?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值