文档章节

继承与多态

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
Android基础之Java多态、继承、重载和重写的区别

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

silencezwm
2017/11/12
0
0
深入剖析C#的多态

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

晨曦之光
2012/03/09
172
0

没有更多内容

加载失败,请刷新页面

加载更多

《看图轻松理解数据结构与算法系列》导引贴

最近学习数据结构,遇到一个很喜欢的博主,他的文章图文并茂,理解起来很容易。特此开贴记录,方便反复阅读。 博主主页 https://juejin.im/user/57c3970f79bc440063e58518/posts?sort=popul...

科陆李明
38分钟前
1
0
20.27 分发系统介绍~ 20.30 expect脚本传递参数

分发系统介绍分发系统-expect讲解(也就是一个分发的脚本)场景:业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者lnmp,最好还需要吧代码上传到服务器上;但是因...

洗香香
52分钟前
2
0
设计一个百万级的消息推送系统

前言 首先迟到的祝大家中秋快乐。 最近一周多没有更新了。其实我一直想憋一个大招,分享一些大家感兴趣的干货。 鉴于最近我个人的工作内容,于是利用这三天小长假憋了一个出来(其实是玩了两...

crossoverJie
58分钟前
2
0
软件架构:5种你应该知道的模式

Singleton(单例模式)、仓储模式(repository)、工厂模式(factory)、建造者模式(builder)、装饰模式(decorator)……大概每个上课听讲的程序员都不会陌生——软件的设计模式为我们提供...

好雨云帮
今天
3
0
OSChina 周二乱弹 —— 这只是一笔金钱交易

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《暮春秋色》- 窦唯 / 译乐队 《暮春秋色》- 窦唯 / 译乐队 手机党少年们想听歌,请使劲儿戳(这里) @我没有抓狂:跨服聊...

小小编辑
今天
1K
19

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部