MST

星途 面试题库

面试题:TypeScript静态方法与属性在继承中的特性

假设有一个基类`Animal`,它有一个静态属性`speciesCount`用于统计所有动物种类数,以及一个静态方法`getSpeciesCount`用于获取该数量。再创建一个子类`Dog`继承自`Animal`,在子类中实例化时,`speciesCount`也要增加。请实现这个结构,并解释静态属性和方法在继承体系中的行为特点。
29.4万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

以下是Python代码实现:

class Animal:
    speciesCount = 0

    @staticmethod
    def getSpeciesCount():
        return Animal.speciesCount


class Dog(Animal):
    def __init__(self):
        Animal.speciesCount += 1


# 测试代码
dog1 = Dog()
dog2 = Dog()
print(Animal.getSpeciesCount())  

静态属性和方法在继承体系中的行为特点:

  1. 静态属性
    • 共享性:静态属性在类的所有实例之间是共享的,并且在继承体系中,所有子类也共享基类的静态属性。例如,上述代码中Animal.speciesCount无论是在Animal类还是Dog类中,都是同一个属性,Dog类实例化时对Animal.speciesCount的修改会影响整个继承体系。
    • 访问方式:可以通过类名直接访问,如Animal.speciesCount,也可以通过实例访问,但不推荐通过实例访问,因为容易造成误解。
  2. 静态方法
    • 无实例绑定:静态方法不依赖于类的实例,它们与类本身相关联。在继承体系中,子类可以继承并调用基类的静态方法,如Animal.getSpeciesCount()Dog类继承体系下同样可用。
    • 调用方式:可以通过类名直接调用,如Animal.getSpeciesCount() ,虽然也可以通过实例调用,但同样不推荐,因为它与实例无关。