Ts学习日记(二)

目录

摘要

1、Ts中类的写法

2、类的继承

3、抽象类

4、多态

5、补充静态方法


摘要

        今天主要学习了Ts中有关类的一些知识。主要是Ts中的类,抽象类,继承和多态。

1、Ts中类的写法

        Ts中创建一个类语法上和es6还有Java是差不多的,话不多说,直接上代码。

//创建类
class Person{
    name:String;
    public age:number;
    // protected age:number;//console.log(p.age);报错
    // private age:number;//子类报错
    constructor(name:string,age:number){
        this.name = name;
        this.age = age;
    }
    run():string{
        return `${this.name}年龄${this.age}在运动`;
    }
}
//实例化对象
const p = new Person("张三",20);

写法上Ts是使用class关键词来定义一个类。constructor是构造函数,具体作用就是在实例化的时候把参数赋值给类中的变量。类的方法的定义更像是Java,不用再加function关键词。

需要注意的是:如果类中的属性不在构造函数中初始化的话,要先用“ | ”运算符来对它赋值一个undefined。具体写法name:string | undefined;

Ts的类还有三种修饰符:public(共有,默认这个)\private(私有)\protected(保护)---(基本同Java)

// public公有属性:在类、子类和类外都可以访问

// private私有属性:只能在本类访问

// protected保护属性:只能在本类和子类中访问

2、类的继承

class Person{
    name:String;
    public age:number;
    // protected age:number;//console.log(p.age);报错
    // private age:number;//子类报错
    constructor(name:string,age:number){
        this.name = name;
        this.age = age;
    }
    run():string{
        return `${this.name}年龄${this.age}在运动`;
    }
}
//继承
class web extends Person{
    constructor(name:string,age:number){
        super(name,age);//相当于调用父类的构造函数
    }
    run():string{//子类和父类有同名方法时,优先使用子类的方法;同Java的重写。
        return `${this.name}年龄${this.age}在运动---子类`;
    }
    work():void{
        console.log(this.name+"在工作");
    }
}
const w = new web("李四",21);

Ts中的类的继承是使用extends 关键词,这一点和es6还有Java是相同的。

其中要注意的是:super()这个函数,相当于调用父类的构造函数。

3、抽象类

抽象类就相当是在类里面定义一个规范,这个规范要求我们强制去实现。

//抽象类和抽象方法(类似Java)
// 抽象方法只能放在抽象类里;抽象类不能实例化
abstract class Animal1{
    name:string;
    constructor(name:string){
        this.name = name;
    }
    // 抽象方法不能实现,只能定义
    abstract eat():any;
}
class Dog1 extends Animal1{
    constructor(name:string){
        super(name);
    }
    // 继承抽象类的类必须实现抽象方法,否则报错。
    eat():void{
        console.log(this.name+"吃骨头")
    }
}

1、抽象类使用abstract关键词来定义。

2、抽象方法必须定义在抽象类里面,但抽象类里不一定必须要有抽象方法。

3、抽象类不能被实例化。

4、继承抽象类的子类必须实现抽象方法。

4、多态

class Animal{
    name:string;
    constructor(name:string){
        this.name = name;
    }
    eat():void{
        console.log("不同动物吃的不同");
    }
}
//狗狗
class Dog extends Animal{
    constructor(name:string){
        super(name);
    }
    eat():void{
        console.log(this.name+"吃骨头")
    }
}
//小猫
class Cat extends Animal{
    constructor(name:string){
        super(name);
    }
    eat():void{
        console.log(this.name+"吃鱼")
    }
}

1、多态主要就是继承+重写父类方法

2、多态主要用于子类有相同的表现,但是表现形式不同(例如:动物都要吃,但吃的东西不同)

5、补充静态方法

//静态方法和静态属性,使用static关键字(基本同Java);
class Person1{
    name:string;
    static age = 21;
    constructor(name:string){
        this.name = name;
    }
    static run():void{
        console.log("静态方法");
        console.log(this.name);//打印的为Person1,说明获取不到类中的属性
        console.log(this.age);//打印的为21,说明可以获取到静态属性
    }
    work():void{
        console.log(this.name+"work");
    }
}
const p1 = new Person1("张三");
// p1.run();//报错,说明静态方法不能通过实例调用
Person1.run();
p1.work();

class web1 extends Person1{
    constructor(name:string){
        super(name);
    }
}
const w1 = new web1("李四");
// w1.run();//报错

1、静态方法和静态属性,使用static关键字(基本同Java);

2、静态方法获取不到类中的属性

3、静态方法可以获取到静态属性

4、静态方法不能通过实例调用只能通过“类名.静态方法名”来使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

回首&逝去~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值