除了指定的方法之外,方法是否可以返回不同的返回类型?

时间:2014-09-10 17:25:39

标签: objective-c

假设我有一个基于NSObject的Deck类。 我们还有基于Deck类的PlayingCardDeck。

该方法如何合法?

 -(Deck *) createDeck
 {

     return [[PlayingCardDeck alloc]init];
 }

2 个答案:

答案 0 :(得分:1)

假设您正确编码了对象继承:是的,这是合法的,因为您的PlayingCardDeck确实是一个Deck。

答案 1 :(得分:1)

是的,方法可以返回不同的类型,只要它与指定的类型兼容。

  

我们PlayingCardDeck基于Deck类。

然后返回PlayingCardDeck的实例是完全可以的,因为它是Deck

这种技术在OOP中非常重要和流行。它允许您隐藏实现,并公开界面。例如,您可以对Deck进行多次实施,但只允许您的用户知道顶级Deck类。这使您可以灵活地选择实施,而不会破坏您的用户。代码。

Cocoa框架也经常使用这个概念。例如,使用返回类型NSString声明的NSString的某些方法实际上返回NSString的子类。由于用户代码不需要知道子类,因此可以方便地编写NSString,并编程到其接口。