MST

星途 面试题库

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

定义一个父类 `Animal`,包含静态属性 `totalCount` 用于记录创建的动物实例总数,以及静态方法 `getTotalCount` 用于获取总数。再定义一个子类 `Dog` 继承自 `Animal`,创建几个 `Dog` 实例,通过调用 `Dog.getTotalCount()` 输出创建的 `Dog` 实例总数。解释这里静态属性和方法在继承中的行为及原理。
26.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

Python 代码实现

class Animal:
    totalCount = 0
    @staticmethod
    def getTotalCount():
        return Animal.totalCount

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


# 创建几个 Dog 实例
dog1 = Dog()
dog2 = Dog()
dog3 = Dog()

print(Dog.getTotalCount()) 

静态属性和方法在继承中的行为及原理

  1. 静态属性
    • 行为:在上述代码中,totalCountAnimal 类的静态属性。当创建 Dog 实例时,实际上是在操作 Animal 类的 totalCount 属性。所有 Animal 及其子类(如 Dog)的实例共享这个静态属性。
    • 原理:静态属性属于类本身,而不是类的实例。在内存中,静态属性只有一份,无论创建多少个类的实例,它们都访问和修改同一个静态属性。当子类创建实例并修改静态属性时,实际上是在修改父类的静态属性,因为它们共享这个属性。
  2. 静态方法
    • 行为getTotalCountAnimal 类的静态方法。Dog 类继承自 Animal,所以 Dog 类也可以调用这个静态方法。通过 Dog.getTotalCount() 可以获取到创建的 Dog 实例总数(实际上是 Animal 类及其子类创建的实例总数,因为共享 totalCount)。
    • 原理:静态方法在类定义时绑定到类。子类继承父类时,会继承父类的静态方法。调用子类的静态方法时,实际上是调用父类中定义的静态方法,它操作的是类级别的属性(如 totalCount)。静态方法不依赖于实例状态,只与类相关,所以可以在不创建实例的情况下通过类名调用。