文档章节

继承与多态

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

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

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

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

晨曦之光
2012/03/09
175
0
对Java多态的理解

Java中多态性的实现 什么是多态 面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。 多态的定义:指允...

wf王帆
2016/05/22
113
0
剖析C#的多态

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

晨曦之光
2012/03/09
65
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis客户端连接以及持久化数据

一、介绍 之前我们讲解了Redis的结构与指令,其实很简单,我也没有过多的讲解,这次我们讲解一下Redis连接客户端以及持久化方案。 1、上文中我们针对redis的数据操作都是在服务器中使用命令执...

编辑之路
33分钟前
3
0
分布式服务化系统一致性的“最佳实干”

1 背景 一致性是一个抽象的、具有多重含义的计算机术语,在不同应用场景下,有不同的定义和含义。在传统的IT时代,一致性通常指强一致性,强一致性通常体现在你中有我、我中有你、浑然一体;...

青梅煮酒论英雄
39分钟前
5
0
命令行查看.net core的版本

dotnet --version

笑丶笑
39分钟前
1
0
Linux 多版本python3、python2共存安装

封装docker包需要python3环境,系统自带python2,yum等程序依赖它,避免异常问题,达到共存,增加python3支持。具体如下: 1、依赖环境 yum -y install zlib-devel bzip2-devel openssl-deve...

悲喜世界
46分钟前
1
0
折腾Java设计模式之策略模式

博客原文地址 简介 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。简单理解就是一组算法,可以互换,再简单点策略就是封装算...

大萌小路
55分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部