MST

星途 面试题库

面试题:Objective-C类的继承体系下的定义与声明

假设你有一个基类`Animal`,包含属性`name`和方法`makeSound`。现在创建一个子类`Dog`,它继承自`Animal`,并重写`makeSound`方法,同时新增属性`breed`。请完整写出`Animal`类和`Dog`类的定义与声明代码,并解释在这种继承关系下,类的初始化顺序和内存管理要点。
18.5万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

以下以Python语言为例:

class Animal:
    def __init__(self, name):
        self.name = name

    def makeSound(self):
        print("Generic animal sound")


class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed

    def makeSound(self):
        print("Woof!")

类的初始化顺序

  1. 创建Dog实例时
    • 首先调用Dog类的__init__方法。
    • Dog类的__init__方法中,通过super().__init__(name)调用父类Animal__init__方法,先初始化父类部分的属性(name)。
    • 然后再初始化Dog类自己新增的属性(breed)。
  2. 总结:在继承关系中,先初始化父类,再初始化子类自身新增的属性。

内存管理要点

  1. 对象创建:当创建Dog对象时,内存中会为整个对象分配空间,包括从父类继承的属性(name)和子类自身的属性(breed)。
  2. 内存释放:当对象不再被引用时(例如超出作用域或显式删除),Python的垃圾回收机制会自动回收其占用的内存。在这个过程中,父类和子类部分的内存会一起被回收,无需开发者手动管理内存释放。但要注意,如果对象中包含一些需要显式关闭或清理的资源(如文件句柄、数据库连接等),则需要在类中实现相应的清理方法(如__del__方法,不过一般建议使用上下文管理器with来处理资源)。