文档章节

继承与多态

W
 W_JJ
发布于 2015/10/12 18:57
字数 618
阅读 7
收藏 0

我在学习继承的时候,得出以下结论

继承结论:

1、子类可以继承父类,可以实现父类中的方法,也可以重写

2、当都子类和父类拥有相同的方法优先时调用自己定义的方法

3、即使子类没有定义这个方法,编译器会去父类找这个方法的声明,注意:但是具体方法的实现,还是优先找自己的实现的方法。

4、如果直接调用父类的方法,而父类没有声明这个方法的时候,编译器不会去找子类,也就是会报错!

多态

1、父类的指针指向子类的对象

2、调用父类方法,允许子类用对象,不允许用父类的对象,原因就是没有使用多态

3、如果要改成多态,就需要把参数的类型由子类指针类型改成父类指针类型

具体表现我通过举例说明继承与多态。

首先建立父类的.h文件,在这里不做详细介绍

#import <Foundation/Foundation.h>

@interface _Car : NSObject

{

    int Tyre;

    double Speed;

}

-(void) setTyre:(int)giveTyre;

-(int) tyre;

-(void) setSpeed:(int)giveSpeed;

-(double) speed;

-(void) setCar:(_Car *)car;

@end


@implementation _Car

-(void) setTyre:(int)giveTyre

{

    Tyre = giveTyre;

}

-(int) tyre

{

    return Tyre;

}

-(void) setSpeed:(int)giveSpeed

{

    Speed = giveSpeed;

}

-(double) speed

{

    return Speed;

}

值得注意的在这里,

对象方法 无返回值 方法名字 (参数类型)参数名字

这是实现多态的格式

而且最关键的在于()中的内容,在Truck.h文件中也有,之后的对象建立也不做介绍。

-(void) setCar:(_Car *)car

{

    NSLog(@"公共汽车有%i,可以跑%.2f",Tyre,Speed);

}

@end


#import <Foundation/Foundation.h>

#import "_Car.h"

@interface Bus : _Car

{

    int Seat;

}


-(void) setSeat:(int)giveSeat;

-(int) seat;

//-(void) setCar:(_Car *)car;

@end


#import "Bus.h"


@implementation Bus


-(void) setSeat:(int)giveSeat

{

    Seat = giveSeat;

}

-(int) seat

{

    return Seat;

}



@end


#import <Foundation/Foundation.h>

#import "_Car.h"

@interface Truck : _Car

{

    int Wight;

}


-(void) setWight:(int)giveWight;

-(int) wight;

-(void) setCar:(_Car *)car;

@end


#import "Truck.h"


@implementation Truck

-(void) setWight:(int)giveWight

{

    Wight = giveWight;

}

-(int) wight

{

    return Wight;

}

-(void) setCar:(_Car *)car

{

    NSLog(@"货车有%i个轮胎,可以跑%.2fkm/h,%it",Tyre,Speed,Wight);

}

@end


#import <Foundation/Foundation.h>

//引用头文件

#import "_Car.h"

#import "Bus.h"

#import "Truck.h"


int main() {

    @autoreleasepool {

        //子类Bus

        Bus *bus = [Bus new];

        [bus setTyre:6];

        [bus setSpeed:80];

        [bus setSeat:12];

        [bus setCar:bus];

        //父类_Car

        _Car *car = [_Car new];

        [car setTyre:4];

        [car setSpeed:80];

        [car setCar:car];

        //子类Truck

        Truck *truck = [Truck new];

        [truck setTyre:6];

        [truck setSpeed:100];

        [truck setWight:100];

        [truck setCar:car];

    }

    return 0;

}

最后我觉得定义参数名不好,将导致自己对整个代码的模糊,所以需明确参数名。

© 著作权归作者所有

共有 人打赏支持
下一篇: 继承练习
W
粉丝 0
博文 6
码字总数 5272
作品 0
榆林
私信 提问
C#.net技术内幕05-面向对象概念

继承: 类可以从基类继承得到所有的操作、属性、特性、事件以及这些内容的实现方法。但不能继承实例构造函数、析构函数和静态构造函数,也不能继承那些显示拒绝访问的成员。 继承扩展了基类,...

技术小胖子
2017/11/09
0
0
剖析C#的多态

一、什么是多态 面向对象程序设计中的另外一个重要概念是多态性。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。可以把一组对象放到一个数组中,然后调用它们的方法,在这种...

晨曦之光
2012/03/09
61
0
第32节:Java中-构造函数,静态方法,继承,封装,多态,包

构造函数实例 测试类 静态方法 静态修饰的调用方式:1)类名.方法名;2)对象.方法名 继承 案例 在现实世界当中,继承就是儿子得到老子的东西,在面向对象的世界当中,继承就是一个类得到了另...

达叔小生
08/21
0
0
深入剖析C#的多态

作者:天雨 一、什么是多态 面向对象程序设计中的另外一个重要概念是多态性。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。可以把一组对象放到一个数组中,然后调用它们的方...

晨曦之光
2012/03/09
172
0
Android基础之Java多态、继承、重载和重写的区别

一、继承(inheritance) 1.1 继承是什么 简而言之,继承就是在现有类的基础上,增加新的方法或者重写基类的方法的一种方式。 继承还是面向对象语言的基本特征【继承、多态和封装】之一。 在J...

silencezwm
2017/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

初识flask

文档 0.10.1版本 http://www.pythondoc.com/flask/index.html 1.0.2版本 https://dormousehole.readthedocs.io/en/latest/ 安装flask $ pip3 install flaskCollecting flask Downloading......

yimingkeji
昨天
0
0
Akka系统《sixteen》译

Actor是一个封装状态(state)和行为(behavior)的对象,它们只通过交换消息通信(放入收件人邮箱的邮件)。从某种意义上说,Actor是最严格的面向对象编程形式,但它更适合将他们视为人:在与Act...

woshixin
昨天
0
0
技术工坊|如何开发一款以太坊钱包(深圳)

【好消息!】HiBlock区块链技术工坊已经成功举办了26期,其中北京1期,西安1期,成都2期,上海22期。经常有社区的小伙伴问定期举办技术工坊的除了上海以外,其他城市有没有?现在区块链技术工...

HiBlock
昨天
1
0
Redis 梳理笔记

安装 安装gccyum install gcc-c++下载传输到服务器上解压tar -xzvf *.tar.gzcd redis-3.2.9编译make安装 make PREFIX=/usr/local/redis install将配置文件拷贝出来cp redis...

晨猫
昨天
0
0
聊聊storm TridentWindowManager的pendingTriggers

序 本文主要研究一下storm TridentWindowManager的pendingTriggers TridentBoltExecutor.finishBatch storm-core-1.2.2-sources.jar!/org/apache/storm/trident/topology/TridentBoltExecut......

go4it
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部