有关于多态的一些拓展知识——你值得拥有

多态,顾名思义就是有多种的形态。就像每个人对每件事物做出的不一样的选择。

关于多态在这里想表达的第一个知识点就是里氏替换及多态的应用:

里氏替换是软件设计时应该遵守的重要原则之一!!有了里氏替换法则才能继承复用成为可能,只有当子类替换掉父类时,软件的功能不受影响,父类被正常使用,而子类也能够在父类的基础上增加新的行为。

下面写一个例子:

//父类  鸟
public class Bird
{
//飞行速度
  public double Speed{get;set;}
//飞
public void Fly()
{

}
}

 //鸵鸟
public class TuoBird:Bird
{
    .....
}

但是大家都知道鸵鸟是不会飞的,所在在这里Fiy()方法什么也没做。这就违背了里氏替换

为了解决这个问题,出现了两个操作符分别是:is  和  as

is操作符:用于检查对象和指定的类型是否兼容

as操作符:用于两个对象之间的类型转换

父类作为参数:里氏替换原则指出子类对象可以代替父类对象,那么在开发程序中可以编写以父类类型作为形式参数的方法,在实际调用时传入子类对象从而实现多态。

下面写一个例子:

  //交通工具父类
  public  class Traffic
    {
      //run
      public virtual void Run()
      {
          Console.WriteLine("父类Run");
      }

    }
 //小汽车
    public class Car:Traffic
    {
        public override void Run()
        {
            Console.WriteLine("一个长相   清秀   的   小男孩   坐在   一辆  豪华的car中    ,白皙小手里拿着一本   Accp7.0 S2深入.NET 编程  认真的阅读中 ,而此时 ,轿车正在宽阔的马路上飞驰着.......");
        }
    }
//自行车
    public  class Bicycle:Traffic
    {
        public override void Run()
        {
            Console.WriteLine("小明在2016年3月1日 骑着 一辆     很破很破  的  凤凰牌自行车    高兴的行驶在坑坑洼洼   泥泥泞泞  高低不平的   土路上");
        }
    }
 //员工类
   public class Employee
    {
         //回家       借助     Traffic
       public void GoHome(Traffic traffic)
       {
           traffic.Run();
       }

    }

抽象类和抽象方法

如何将一个普通类变成抽象类?

(1)关键字:abstract

(2)抽象类不能实例化

(3)抽象方法没有方法体连{}也没有

(4)一个类如果继承的是抽象类那么它必须重写抽象类中所有的抽象方法

(5)抽象类不能是静态的或者是密封的  例如string

(6)抽象方法存在抽象类中,抽象类中可以由普通类

(7)抽象类中抽象方法只有用来规定子类的方法形式(参数  返回值)

(8)告诉大家的秘密 一般人我都不说的,有快捷键  ctrl+.+回车

跟大家说一下虚方法和抽象方法的区别

虚方法 抽象方法
用virtual修饰 用abstract修饰
要有方法体即使是分号 不允许有方法体
可以被子类override 必须被子类override
除了密封类外都可以定义 只能在抽象类中定义
时间: 2024-12-15 01:32:42

有关于多态的一些拓展知识——你值得拥有的相关文章

抽象类,多态以及接口的知识内容梳理

抽象类的格式abstract class 父类名(Animal){}抽象方法的格式:public abstract(必须写) 方法名() ;注意:1)如果一个类中有抽象方法,那么这个类一定抽象类2)抽象类中一定有抽象方法吗? 还可以非抽象的抽象类的特点:1)抽象类不能直接实例化(不能直接创建对象)2)子类必须重写父类的抽象功能 抽象类的子类:1)抽象类的子类如果是抽象类呢? 没有任何意义,因为使用的就是通过具体类创建对象,具体类都抽象类,没意义! 2)子类是具体类的话,对象的创建工作,由子类完成

python这+=和=的拓展知识

关于网上的说法有两点我想说一下 第一点 网上一直说num = num + num 和 num += num是等价的,在这里我要说一下,这两个只有在num是数值的时候才是等价的,如果不是数值的话,num = num + num是把num 加上num的值赋予给num,这个是要新开辟一个空间给num的,而num+=num是修改num原来的值为num + num的结果.可能你会有点愣,没事,下面我们看看例子 a = [100] def zhouyu(num):     num = num + num  

拓展知识之硬盘的DOS管理结构-磁道,扇区,柱面和磁头数

硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等.每个盘片有两面,都可记录信息.盘片被分成许多扇形的区 域,每个区域叫一个扇区,每个扇区可存储128×2的N次方(N=0.1.2.3)字节信息.在DOS中每扇区是128×2的2次方=512字节,盘片表 面上以盘片中心为圆心,不同半径的同心圆称为磁道.硬盘中,不同盘片相同半径的磁道所组成的圆柱称为柱面.磁道与柱面都是表示不同半径的圆,在许多场合, 磁道和柱面可以互换使用,我们知道,每个磁盘有两个面,每个面都有一个

Python学习之路:通过分片的方式修改列表的技巧(拓展知识)

一.为列表添加值 用分片的方式可以在列表的头部和尾部添加值 1.在列表的头部添加值 x = [1, 2, 3] #创建列表x x[:0] = [0] #用分片的方式在列表头部添加值 print(x) 结果为: [0, 1, 2, 3] #添加成功 注:相当于x.insert(0, 0) 2.在列表的尾部添加值 x = [1, 2, 3] x[len(x):] = [4] #用分片的方式在列表的尾部添加值 print(x) 结果为: [1, 2, 3, 4] 注:相当于x.insert(len(x

数据库设计你会么,这么牛的知识你值得拥有

     好久不见各位,小编回归了,我知道你们肯定想我了,是吧我知道,好了,这次回归是给大家带来了新的知识,大家一定要好好听讲,会受益终身的哦! (1)什么是数据库设计? 数据库设计就是将数据库中的数据实体之间的关系,进行规划和结构化的过程. 数据库的设计师非常重要的,良好的数据库设计会表现的效率高,便于进一步扩展,使得应用程序的开发变得更容易. (2)既然我们要设计数据库就要知道它的步骤 收集信息:标识实体:标识每个实体需要存储的详细信息:标识实体之间的关系. (3)实体——关系模型 实体:是

2016-02-12 网站开发知识梳理--v1.0

1. 梳理的体系结构如下:   2.下面具体讲讲我目前的认知状况: <1> 浏览器端优化: 目的 -- 降低页面加载时间 #影响加载时间的因素: 页面上的资源(图片.js.css等)资源链接数 静态文件是否设置了缓存(依据expires/ETAG) 页面上链接是否来自多个域名(浏览器同时向同一个域名发起的链接数是固定的,所以将不同的文件放到不同的二级域名下可以提高资源链接的并发数) cookie的使用(非通用的cookie不要设置成根域名,否则所有页面.js.图片在访问时都会带上cookie,

2.4.1 集合基础知识

集合是无序可变序列,使用一对大括号(作者温馨提示:这一点和字典很类似,千万不要搞混啊)作为界定符,元素之间使用逗号分隔,同一个集合内的每个元素都是唯一的,元素之间不允许重复. 在Python中,直接将集合赋值给变量即可创建一个集合对象. 1 >>> a = {3,5} #创建集合对象 2 >>> a 3 {3, 5} 4 >>> 5 >>> type(a) #查看对象类型 6 <class 'set'> 7 >>

C++复习:多态

多态 问题引出(赋值兼容性原则遇上函数重写) 面向对象新需求 C++提供的多态解决方案 多态案例 多态工程意义 面向对象三大概念.三种境界(封装.继承.多态) 多态成立条件 总结条件.看代码的时候要看出多态 1多态 1.1问题引出 如果子类定义了与父类中原型相同的函数会发生什么? 函数重写 在子类中定义与父类中原型相同的函数 函数重写只发生在父类与子类之间 class Parent { public: void print() { cout << "Parent:print() do

4.1.6 继承

俗话说得好,"虎父无犬子"."龙生龙,凤生凤,老鼠的儿子会打洞",这在一定程度上说明了继承的重要性.在面向对象编程中,继承是代码复用和设计复用的重要途径,是面向对象程序设计的重要特征之一,继承也是实现多态的必要条件之一. 设计一个新类时,如果可以继承一个已有的设计良好的类然后进行二次开发,无疑会大幅度减少开发工作量,并且可以很大程度地保证质量.在继承关系中,已有的类称为父类或基类,新设计的类称为子类或派生类.派生类可以继承父类的公有成员,但是不能继承其私有成员.如果