1、派生类的对象和基类是属于的关系,即 对象 is a X类,对象属于X类。

2、多态性的概念:

了解多态性之前,要熟悉引用和对象的区别:

对象存储在堆中,引用(符)存储在栈中,引用符的值是对象在堆中的地址,因此通过引用符可以轻松地找到对象。

一般情况下,引用符和对象属于同一类型,基类的引用指向基类的对象,派生类的引用指向派生类的对象,但是我们知道,派生类对象也属于基类,所以基类引用符可以指向派生类对象。

一个基类的引用符,可以指向多种派生类对象,具有多种不同的形态,这种现象叫多态性。这种方式经常用作设计模式中的工厂模式。

3、接口

接口实际上就是一个类,只是这个类只声明成员,而不具体实现。故不能创建接口的实例,继承自接口的类必须实现接口的所有方法。接口也能很好的体现多态性,当函数中参数类型为基接口时,则不管是什么类,只要这个类继承于基接口,均可以根据实例化情况来调用。

4、接口、抽象类的相似之处和不同:

接口和抽象类均不能实例化,而且要求派生类实现其抽象方法,但不是必须全部实现。

但抽象类有更多的功能:可以由子类继承,而且可以包括状态数据和具体方法。

5、接口和类的区别:

接口不能从类继承,而类可以实现接口(继承接口);

接口可以继承多个接口,而类虽然可以继承多个接口,却只能继承一个类。

接口成员必须是方法、成员属性、事件或索引器。(注意无数据成员)

所有接口成员必须能公开访问。

6、用类?用接口?

当决定使用类还是接口类型,即查看类型与继承子类之间的关系。接口为类定义一种行为,即它“能做什么”,它允许对象创建自身的副本。另一方面,当继承子类“一种”基类时,就应该使用类。例如:可以创建shape(形状)作为基类,创建circle(圆)作为shape的子类,而将改变形状大小的功能作为一个接口方法。

转载于:https://www.cnblogs.com/dongzhiquan/archive/2011/11/05/2237159.html

面向对象之多态性(基类引用可以指向子类)相关推荐

  1. 父类(指针、引用)指向子类对象

    父类(指针.引用)指向子类对象 1. 父类类型指向子类对象 include <stdlib.h> #include <iostream> using namespace std ...

  2. 非多态的继承情况下,基类指针可以指向派生类对象么?

    class Base { // 基类 public:Base(int aa=88) : a(aa) {}void f() { // 非virtualcout<<"Base&quo ...

  3. 【C++】【读个小故事就弄懂】为什么基类指针可以指向派生类对象,而派生类指针却不可以指向基类对象?(最易懂最有趣最生动的举例)

        在内存中,一个基类类型的指针是覆盖N个单位长度的内存空间.     当其指向派生类的时候,由于派生类元素在内存中堆放是:前N个是基类的元素,N之后的是派生类的元素.     于是基类的指针就可 ...

  4. C# 子类实例化基类 基类使用不了子类的方法_C#高级编程面试考题

    一.简答题 1.简述C#中的所有访问修饰符及访问权限 private(私有的) 给类,及所有类成员使用 所有类成员的默认访问修饰符 可访问范围 当前类自身 public(公开的) 给类,及所有类成员使 ...

  5. C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记09--构造方法/析构方法/继承/多态/封装...

    一.构造方法 当创建一个类时, 系统会自动创建一个默认的无参构造方法, 这个方法和类同名, 在创建对象的时候自动调用. 默认的构造方法里面什么也没有, 重写之后就可以在创建对象的时候同时搞点事情了. ...

  6. C# 子类实例化基类 基类使用不了子类的方法_老话题:6个方法,检验你有没有正确使用设计模式...

    方法一:设计模式是为了消除继承 大部分设计模式,是让你在在面向对象的基础上尽量消除继承的手段.所以,如果你用了一些设计模式,减少了继承,那你八成用对了.如果你用了一大堆设计模式,然而继承却越来越频繁, ...

  7. C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记11--接口/泛型

    一.接口 1.1简介: 接口是一种特殊的引用类型, 和类很相似. 它定义了属性, 方法, 事件, 这些都作为接口的成员/ 接口中只包含成员的声明, 成员的定义是派生类的责任(谁继承谁实现). 接口在某 ...

  8. java子类怎么编译_java – 无法编译从基类实现抽象方法的子类

    编译我已经定义的基类的子类有一个问题,它有一个单独的方法,而每个子类都实现了抽象基类方法,但是 javac说他们甚至没有在子类中明确定义它们. DbModel.java(基类) package com ...

  9. 为什么父类引用可以指向子类对象 子类引用不能指向父类对象 泛型

    假设有父类Fu ,其子类为Zi ,从对象的内存角度,假设Fu类里面的变量占内存2M, Zi 类里的变量占内存1M: Fu f = new Fu ();//系统将分配2M内存 Zi z = new Zi ...

最新文章

  1. 【一天一个shell命令】文本操作系列-touch
  2. Apache Artemis —— 非堵塞 Java 嵌入消息服务
  3. C#编程语言之获取文件编码格式(转载)
  4. optee3.8 qemu_v8的环境搭建篇
  5. 符号常量和变量有什么区别_“变量”和“常量”,计算机程序中的那个“量”是什么“量”...
  6. ITK:可视化静态稀疏Shi 2D水平设置图层
  7. plex实现流媒体服务器_Plex继续远离服务器,提供网络节目
  8. 联想r630服务器开启虚拟化,整合虚拟化 联想万全R630服务器上市
  9. Swagger天天用,但它背后的实现原理很多人都不知道!
  10. 精品软件 推荐 瑞星个人防火墙V16 新UI、新功能、新体验
  11. JavaWeb03-HTML篇笔记(二)
  12. catia中的螺旋伞齿轮画法_CATIA齿轮绘制方法
  13. 金蝶服务器选项没有账套信息,金蝶财务软件帐套属性设置保存和帐套启用报错的解决方法...
  14. 后台网站首页设计过程
  15. springboot集成微信和QQ第三方登录
  16. 点集拓扑——基本知识点整理归纳
  17. 电脑无法连接WiFi,一直显示无法连接此网络
  18. Java 语言中的实例初始化块 ( IIB) 详解
  19. 【已解决】找到无效的 Gradle JDK 配置(invalid Gradle JDK configuration found)
  20. 投机者怎么在市场中使用底部放量进行程序化交易

热门文章

  1. [react] 举例说明useState
  2. 前端学习(2910):vue的介绍
  3. [vue] vue如何监听键盘事件?
  4. [vue] 说说你对SPA单页面的理解,它的优缺点分别是什么?
  5. 前端学习(2633):父子传值
  6. 前端学习(2345):项目目录简单介绍
  7. “约见”面试官系列之常见面试题第六篇说说弹性布局(建议收藏)
  8. “睡服”面试官系列第八篇之iterator(建议收藏学习)
  9. 前端学习(310):清除浮动的方法
  10. spring mvc学习(1):spring jar包