假设我有一个基于NSObject的Deck类。 我们还有基于Deck类的PlayingCardDeck。
该方法如何合法?
-(Deck *) createDeck
{
return [[PlayingCardDeck alloc]init];
}
答案 0 :(得分:1)
假设您正确编码了对象继承:是的,这是合法的,因为您的PlayingCardDeck确实是一个Deck。
答案 1 :(得分:1)
是的,方法可以返回不同的类型,只要它与指定的类型兼容。
我们
PlayingCardDeck
基于Deck
类。
然后返回PlayingCardDeck
的实例是完全可以的,因为它是Deck
。
这种技术在OOP中非常重要和流行。它允许您隐藏实现,并公开界面。例如,您可以对Deck
进行多次实施,但只允许您的用户知道顶级Deck
类。这使您可以灵活地选择实施,而不会破坏您的用户。代码。
Cocoa框架也经常使用这个概念。例如,使用返回类型NSString
声明的NSString
的某些方法实际上返回NSString
的子类。由于用户代码不需要知道子类,因此可以方便地编写NSString
,并编程到其接口。