gpt4 book ai didi

c - 为什么可以用父类(super class)的类型定义一个变量,但给它分配一个子类的对象?

转载 作者:太空宇宙 更新时间:2023-11-04 00:12:51 24 4
gpt4 key购买 nike

我还不是很清楚。示例:

NSArray *arr = [[NSMutableArray alloc] init];

我的意思是......是的,它有效。但是:为什么我可以告诉编译器“嘿,我的 var 只是一个 NSArray,你只需要保留空间以便它适合那里”然后,实际上,那个地方有一个大而胖的 NSMutableArray更多的方法,更多的实例变量,只需要更多的空间。我的意思是……这怎么可能?

我会以另一种方式理解:左侧是大胖 NSMutableArray,右侧是小 NSArray。据我了解,父类(super class)总是比子类更小、更简单。子类可能会覆盖一些东西,但它也可能会添加一些东西。对吧?

假设您买了一个车库,因为您的妻子在电话中告诉您她买了可以开车的东西。那么,它就不仅仅是你想象的那种小车了。她买了一辆大卡车。它放不下。

那么我必须如何思考这个问题,才能将它牢记在心? ;)

这转到社区 wiki,以防其他人也感到困惑。

最佳答案

我认为您错误的关键点是相信变量包含对象并且编译器为它们保留空间。

在 Objective-C 中,就像在 Java 中一样,变量只包含对对象的引用——编译器的参与到此为止。对象本身位于称为堆的内存区域中,由运行时维护。

关于c - 为什么可以用父类(super class)的类型定义一个变量,但给它分配一个子类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/839664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com