2

这里的新手试图理解继承。如果我用多个属性初始化一个新对象,并且我希望其他类帮助为这些属性分配值,我是否需要创建这些其他类的实例?可视化:

-(ObjA *)init{
    self = [super init];
    self.property1 = [method from Class A];
    self.property2 = [method from Class B];
    self.property3 = [method from Class C]; etc...
    return self;
 }

换句话说,假设 A、B 和 C 类需要知道对象 A 是什么,我是否需要将这些类方法创建为实例方法并初始化每个对象?还有其他方法可以解决这个问题吗?预先感谢您的帮助。

4

2 回答 2

5

换句话说,假设 A、B 和 C 类需要知道对象 A 是什么

没有


您可以简单地从 ClassA/B/C 等调用方法。但返回类型必须与相应的property.

让,property1是为了善良,NSString那么你的ClassA方法必须是

-(NSString *)methodClassA{
   ...
   return someStringValue;
}

然后你需要使用:

ClassA *objClassA=[ClassA new];
self.property1=[objClassA methodClassA];

或者您可以通过以下方式使用类方法:

+(NSString *)methodClassA{
   ...
   return someStringValue;
}

并将其用作:

self.property1=[ClassA methodClassA];
于 2013-05-12T05:00:55.960 回答
2
assuming Class A, B, and C need to know what Object A is

对象的初始化代码应该是自包含的,除非它使用不同对象拥有的功能,在这种情况下,对象充当该功能的客户端。也就是说,objectA 充当 A、B、C 的客户端(如您的代码中所示)。

但这并不意味着 A、B、C 需要知道(依赖于)objectA。通过这样做,您是在说他们没有理由独立存在。

一般来说,

  • 每个类或方法都应该有一个封装的目的。这使得孤立地理解、更改和测试变得容易。创建类的常见模式,其唯一目的是封装信息以创建不同的类,但是将其拆分为三个不同的类是非常奇怪的(例如,我无法想象这样的例子)。

  • An object shouldn't be allowed to exist in an unusable state, nor should it require non essential information when it is created. Does objectA require those properties to function? if it does, your code is right, if it doesn't, the initializer is providing too much information and making it less reusable.

Try to rethink your doubt with a real (instead abstract) example. You may end up making sense of it yourself.

于 2013-05-12T05:34:27.667 回答