ts中类的继承

本文介绍了在Java中类与类之间的继承关系,如何通过`extends`实现子类对父类的继承,以及子类如何调用父类的方法(使用`super`)和重写父类方法的实例。

说下结语:
类与类之间存在继承关系,通过extends进行继承
子类可以调用父类的方法 使用super
子类还可以重写父类的方法

// =====类的继承
// 扩展现有的类 ,通过继承
// 继承 :类与类之间的关系

class Animal {
  name: string;
  age: number;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
  sayHi(str: string) {
    console.log('hi,' + str);
  }
}

class Dog extends Animal {
  constructor(name: string, age: number) {
    // 调用父类的构造函数,使用的super
    super(name, age);
  }
  // 可以调用父类的方法,还可以重写父类的方法
  sayHi() {
    console.log('我是dog类中的sayHi方法');
    super.sayHi('狗狗'); // 调用父类的sayhi方法
  }
}

const a5 = new Animal('小猫', 3);
a5.sayHi('喵咪');
const d = new Dog('边牧', 2);
d.sayHi();

// 总结:
// 类与类之间存在继承关系,通过extends进行继承
// 子类可以调用父类的方法 使用super
// 子类还可以重写父类的方法

TypeScript 中实现可继承的单例,可借助泛型达成单例函数的继承。以下为两种实现方式: ### 实现方式一 ```typescript // Singleton.ts export class Singleton<T> { private static instance: any = null; public static getInstance<T>(c: { new(): T }): T { if (this.instance == null) { this.instance = new c(); } return this.instance; } } // 单例继承的实现 import { Singleton } from "./Singleton"; class SingletonTest extends Singleton<SingletonTest> { private successMsg = "get Singleton Successfully!"; success() { console.log(this.successMsg); } } let test = SingletonTest.getInstance(SingletonTest); test.success(); ``` 此实现里,`Singleton` 为泛型,`getInstance` 方法用于获取单例实例。若实例不存在,就创建一个新实例;反之,则返回已有实例。`SingletonTest` 继承自 `Singleton<SingletonTest>`,通过 `getInstance` 方法获取单例实例并调用 `success` 方法 [^2]。 ### 实现方式二 ```typescript class Singleton<T> { private static instance: any; public num = 0; protected constructor() { } public static getInstance<T>(): T { if (!this.instance) { this.instance = new this(); } return this.instance as T; } public test(num: number): void { this.num = num; } } // 使用泛型单例 class Test1 extends Singleton<Test1> { public log() { console.log("test1"); } } class Test2 extends Singleton<Test2> { public log() { console.log("test2"); } } let t1 = Test1.getInstance<Test1>(); t1.test(100); let t2 = Test2.getInstance<Test2>(); t1.log(); t2.log(); t2.test(200); console.log(t1.num, t2.num); if (t1 === t2) console.log("t1==t2"); ``` 该实现中,`Singleton` 同样是泛型,`getInstance` 方法用于获取单例实例。`Test1` 和 `Test2` 继承自 `Singleton` ,分别获取各自的单例实例并调用相关方法 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值