黑马程序员****OC语言基础****继承和方法重写

本文详细介绍了Objective-C中的继承概念及其应用,包括如何定义基类和派生类,以及如何重写父类的方法。通过具体的代码示例展示了继承的实际运用,并解释了继承在面向对象编程中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

继承:

         通过继承机制,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类,又称为父类。由已存在的类派生出的新类称为派生类,又称为子类。 

            1)基类的私有属性能被继承,不能被使用。

            2)OC中的继承是单继承:也就是说一个类只能一个父类,不能继承多个父类

            3)继承的合理性: 

           方法的重写,从父类继承的方法,可能这个方法并不适合子类,可以在子类中重写父类的方法。 

<span style="font-size:24px;">@interface Dog : NSObject {
int _leg; //腿的个数
int _ear; //耳朵个数
}
 -(void)eat;
 -(void)run;
@end</span>


           Dog作为父类,有两个实例变量和两个对象方法


<span style="font-size:24px;">#import "Dog.h" 
@interface Hua : Dog {

}
-(void)eat; //此处可以重写父类的eat的方法 
@end</span>

       

   Hua继承自Dog,可以重写父类的方法。

       实例练习:

     person.h声明:

<span style="font-size:24px;">#import <Foundation/Foundation.h>

@interface Person : NSObject

@property int age;
@property NSString *name;
-(void) speak;
@end</span>

类 Person 属性: _age 、_name 方法: speak 

    person.m实现:

<span style="font-size:24px;">#import "Person.h"

@implementation Person
-(void) speak{
    NSLog(@"人在说");
}
@end</span>
  

student.h声明:

<span style="font-size:24px;">#import "Person.h"

@interface Student : Person

@property int height;
-(void) playGame;
@end</span>


    student.m实现


<span style="font-size:24px;">#import "Student.h"

@implementation Student
-(void) playGmae{
    NSLog(@"%@玩游戏",_name);
}
@end</span>

main.m


<span style="font-size:24px;">#import <Foundation/Foundation.h>
#import "Student.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Student *zgl = [Student new];
        zgl.name = @"诸葛亮"; //继承自父类的实例变量
        zgl.age = 18;      //继承自父类的实例变量
        zgl.height = 110;     //子类新增的实例变量
        [zgl speak];     
        [zgl playGame];  
    }
    return 0;
}</span>

    运行结果:  人在说

                         诸葛亮玩游戏


     重写方法:


<span style="font-size:24px;">#import "Student.h"

@implementation Student
-(void)speak{
    NSLog(@"%@在咆哮",_name);
}
-(void) playGmae{
    NSLog(@"%@玩游戏",_name);
}
@end</span>

main.m

<span style="font-size:24px;">#import <Foundation/Foundation.h>
#import "Student.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Student *zgl = [Student new];
        zgl.name = @"诸葛亮"; //继承自父类的实例变量
        zgl.age = 18;      //继承自父类的实例变量
        zgl.height = 110;     //子类新增的实例变量
        [zgl speak];     //此时已经重写了speak方法
        [zgl playGame];  
    }
    return 0;
}</span>
  

       运行结果:诸葛亮在咆哮 

                           诸葛亮玩游戏



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值