Objective-C类继承与分配
给定以下行,其中Square是矩形的子类:Objective-C类继承与分配,objective-c,inheritance,alloc,Objective C,Inheritance,Alloc,给定以下行,其中Square是矩形的子类: Rectangle *thisObject = [[Square alloc] init]; Square *thisObject = [[Square alloc] init]; 此对象包含: 1.正方形对象的所有实例变量。 2.在Square对象中实现的所有实例方法。 3.矩形对象的所有实例变量。 4.矩形对象中实现的所有实例方法 给定以下行,其中Square是矩形的子类: Rectangle *thisObject = [[Square al
Rectangle *thisObject = [[Square alloc] init];
Square *thisObject = [[Square alloc] init];
此对象包含:
1.正方形对象的所有实例变量。
2.在Square对象中实现的所有实例方法。
3.矩形对象的所有实例变量。
4.矩形对象中实现的所有实例方法
给定以下行,其中Square是矩形的子类:
Rectangle *thisObject = [[Square alloc] init];
Square *thisObject = [[Square alloc] init];
此对象包含:
1.正方形对象的所有实例变量。
2.在Square对象中实现的所有实例方法。
3.矩形对象中实现的所有实例方法
有分歧吗?没有,这些是相同的。这两者之间的唯一区别是,如果您试图向thisObject发送一条矩形消息,则编译器会发出警告。但这只是一个警告,发送的消息实际上在运行时起作用。你说得对。指针的类型与对象本身的类型无关。它只是让编译器更容易检查类型。您也可以对所有对象使用id,它们的行为不会改变。我不同意。您没有注意到第二个也包含矩形对象的所有实例变量 两个实例完全相同。实例是,除了类集群之类的东西之外,您将它们分配为什么,而不是您以后声称它们是什么 这两个实例都是方形对象 该行:
Monkey *george = [[Square alloc] init];
没有做任何事情让乔治变成猴子。他是个正直的人。如果您向他发送Monkey不响应的消息,编译器将警告您,但如果这些消息是方形消息或任何方形超类,他将作为方形响应
若您发送george Monkey消息,您将得到关于找不到选择器的运行时错误。除非您的Monkey消息恰好与一个方形消息匹配,这将与它们的公共超类中的方法匹配
这就是多态性。你可以说乔治是一只猴子,或者是一个圆圈,或者只是一个id,但他会说他是一个正方形