黑马程序员—OC(继承与多态)

                                                                                   ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 

1. 继承


     设计两个类Doctor  、Student  


<span style="font-size:18px;"><span style="color:#006600;">//   doctor 的声明</span>
@interface  Doctor :NSObject
{
        @public
         int  weight;
}
- (void)eat;
@end

<span style="background-color: rgb(255, 255, 255);"><span style="color:#006600;">//    doctor 的实现</span></span>
@implementation  Doctor
- (void)eat
{
       NSLog(@"吃完后的体重:%d",weight);
}
@end</span>


<span style="font-size:18px;"><span style="color:#006600;">//   student 的声明</span></span>
<span style="font-size:18px;">@interface  Student  :NSOject
{
        @public 
         int  weight ;
}
- (void)eat ;
@end

<span style="color:#006600;">//  student 的实现</span>
@implementation  Student
- (void)eat
{
        NSLog(@"吃完后体重:%d",weight);
}
@end</span>

            从上面两个代码块中,我们可以知道,这两个类拥有相同的属性和方法,在这里我们可以
把相同的属性和方法抽取到一个父类中。

   抽取重复的代码到父类:

              

<span style="font-size:18px;"><span style="color:#006600;">//  person 的声明</span>
@interface  Person : NSObject
{
         @public
          int  weight; 
}
- (void)eat;
@end

<span style="color:#006600;">//  person 的实现</span>
@implementation  Person 
- (void) eat
{
          NSLog(@"吃完后体重:%d",weight) ;
}
@end</span>

       然后子类可在父类的基础上拓充属性和方法

        

<span style="font-size:18px;"><span style="color:#006600;">//    student 的声明</span>
@interface  Student  : Person
{
          @public
           int   distance ;   <span style="color:#006600;">//  定义类的属性:距离</span>
}
- (void)run ;
@end

<span style="color:#006600;">//    student 的声明</span>
@implemention Student
- (void)run
{
          NSLog(@"Student 跑了%d米",distance) ;
}
@end
</span>
     

  细节问题:    


      *  子类方法和属性的访问过程:如果子类中没有,就去访问父类。 


      *  继承后的父类还可以和以前一样使用。


      *  NSObject 是OC中的最终父类。


      *  子类和父类不能拥有相同的成员变量。


继承的好处:

                 1>    不改变原来的模型的基础上,拓展方法。


                  2>   建立了类与类之间的联系。


                  3>   抽取到了公共代码。


             坏处:


                   耦合性太强。


继承的使用场合:


                  如过一个类中的属性都是你想要的,参用继承;如果类当中部分属性是你想要的,可以抽取出另一个父类。


2.多态


       1>  多态的基本概念:


                      OC 中某一类事物 的多种形态,可以说OC对象具有多态性。

 

        2> 多态的体现 


             

<span style="font-size:18px;">Person  *p = [ Student  new] ;      <span style="color:#006600;"> </span><span style="color:#660000;">// 子类对象赋值给父类指针</span><span style="color:#006600;">
</span>
p —> distance = 100 ;      <span style="color:#660000;">//  父类指针访问对应的属性和方法
</span>
[ p  run ] ;         
</span>

     

      3> 多态的好处


                        用父类接收参数,节省代码。


         4>   多态的局限性     


                          不能访问子类的属性(可以考虑强制类型转换)

          


                 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值