除了指定的返回类型之外,方法是否可以返回其他返回类型



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

下面的方法如何合法?

 -(Deck *) createDeck
 {
     return [[PlayingCardDeck alloc]init];
 }

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

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

我们有基于Deck类的PlayingCardDeck

那么返回一个PlayingCardDeck的实例是完全可以的,因为它是一个Deck

这项技术在面向对象编程中非常重要和流行。它允许您隐藏实现,并公开接口。例如,您可以实现Deck的几个实现,但只让用户知道顶级Deck类。这使您可以在不破坏用户代码的情况下灵活选择实现。

Cocoa框架也大量使用这个概念。例如,用NSString的返回类型声明的NSString的一些方法实际上返回了NSString的一个子类。由于用户代码不需要知道子类,他们可以方便地编写NSString,并对其接口进行编程。

相关内容

最新更新