TypeScript类与继承

1.我理解的类

类可以理解成为一个模板,通过这个模板可以实例化某一个具体对象
比如说:我们定义一个动物类,
通过这个动物模板可以实例化成为猫或者其他具体的动物

2.类的基本使用

我们需要创建一个动物类;
这个动物有姓名、【默认值小可爱,字符串类型】
年龄、【默认值 20,数字类型】
性别、【字符串类型】
体重、【数字类型】
爱好【爱好可有可无,如果有必须是一个数组类型的】
这个动物类还有一个say的实例方法
下面我们就开始实现
class Animails {
    name: string
    age: number
    gender: string
    weight: string
    likes?: Array<any>
    //爱好这个属性可有可无,如果有必须是数组类型,需要给名称默认值小可爱、年龄默认值age=20
    // 构造器直接对属性进行初始化
    constructor(
        name: string = '小可爱',
        age: number = 20,
        gender: string,
        weight: string,
        likes?: Array<any>
    ) {
        // 初始化属性中的数据
        this.name = name
        this.age = age
        this.gender = gender
        this.weight=weight
    }
    // 定义实例方法
    say() {
        console.log(
            `大家好我是${this.name},
            今年${this.age}岁了,
            性别:${this.gender},
            体重:${this.weight},
        `);
    }
}
// 实例化对象
let pig = new Animails('猪猪侠', 10, '男', '30kg');
pig.say();//调用实例方法

3.实例化类的注意点

当类中的属性都有默认值时,
实例化对象的时候,可以不用进行进行初始化。
类中的属性如果没有默认值,不是可选属性。必须一一赋值(初始化)
就是说:我们必须对构造器中的属性进行一一赋值
除非构造器中有默认值

构造器中有默认值,实例化的时候可以不用一一赋值

class Animails {
    name: string
    age: number
    constructor(
        name: string = '小可爱',
        age: number = 20,
    ) {
        // 初始化属性中的数据
        this.name = name
        this.age = age
    }
    // 定义实例方法
    say() {
        console.log( `大家好我是${this.name}, 今年${this.age}岁了, `);
    }
}
// 实例化对象
let pig = new Animails();
pig.say();//调用实例方法

4.类与类之间的继承

A类继承了B类,那么A类叫做子类;B类叫做基类
子类--->又叫派生类
基类--->又叫父类或者超类
下面这个例子我们将子类MySon将会去继承Father父类。
子类有属于自己的方法sonsay;
子类可以去调用父类的方法super.say('子类');
同时我们在子类中将会去重写父类的方法
// 我们定义了一个超类【父类】
class Father {
    // 定义属性
    name: string
    age: number
    // 定义构造函数
    constructor(name: string, age: number) {
        // 初始化属性中的数据
        this.name = name
        this.age = age
    }
    // 定义实例方法
    say(str:string) {
        console.log( `大家好我是${this.name}, 今年${this.age}岁了,${str}呼喊的我 `);
    }
}

// 子类去继承了父类
class MySon extends Father {
    // constructor中的参数必须要满足父类。
    // 除非父类有默认参数或者父类中的属性不是必须属性。
    constructor(name: string, age: number) {
        // super调用父类中的构造函数
        super(name,age)
    }
    // 子类中自己的实例方法
    sonsay() {
        console.log('我是子类哈哈');
        //调用父类中的实例方法
        super.say('子类');
    }

    // 重写父类的方法
    say(name:string) {
        console.log(`我重写了父类的方法我是${name}`)
    }
}
// 进行实例化
let xiaoming = new MySon('小明', 19);
// 进行方法调用 
xiaoming.sonsay();
xiaoming.say('小明');

posted @   南风晚来晚相识  阅读(612)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示