菜鸟教程小白 发表于 2022-12-13 12:04:24

iphone - 子对象初始化为父对象


                                            <p><p>B 是 A 类的子类。</p>

<pre><code>A * a = [ init];
B * b = [ init];
</code></pre>

<p>其中哪些是无效的,为什么? </p>

<p>当我输入这个时,我收到了第二件事的警告,但我不明白它的意思。它显示了“使用 'A *' 类型的表达式初始化 'B * __strong' 的不兼容指针类型”。也可能有人告诉我第二个表达式是否有效以及如何做。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果 <code>B</code> 是 <code>A</code> 的 <em>子类</em>,则它的实例可以在 <code>A</code> 的实例可以使用的任何地方使用使用。反之则不成立。</p>

<p>这是一个使用 Apple 类的真实示例:考虑 <code>NSArray</code> 及其子类 <code>NSMutableArray</code>。由于<code>NSMutableArray</code> <em>是一个</em> <code>NSArray</code>,所以下面的赋值是有效的:</p>

<pre><code>NSArray *myArray = [ init];
</code></pre>

<p>但是,由于<code>NSArray</code>不一定是<code>NSMutableArray</code>,所以下面的赋值是无效的:</p>

<pre><code>NSMutableArray *myArray = [ init];
</code></pre>

<p><strong>EDIT</strong> 从语言的角度来看,这两个赋值都是有效的:代码将被编译,如果你避开 <code>B</code> 的方法,甚至可以运行<code>A</code>也不支持,这要归功于Objective C的动态方法分派(dispatch)机制。但是编译器不能再验证涉及变量的代码,并告诉你其他潜在的问题。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 子对象初始化为父对象,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/9612998/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/9612998/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 子对象初始化为父对象