面向对象之多态性(基类引用可以指向子类)
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. 父类类型指向子类对象 include <stdlib.h> #include <iostream> using namespace std ...
- 非多态的继承情况下,基类指针可以指向派生类对象么?
class Base { // 基类 public:Base(int aa=88) : a(aa) {}void f() { // 非virtualcout<<"Base&quo ...
- 【C++】【读个小故事就弄懂】为什么基类指针可以指向派生类对象,而派生类指针却不可以指向基类对象?(最易懂最有趣最生动的举例)
在内存中,一个基类类型的指针是覆盖N个单位长度的内存空间. 当其指向派生类的时候,由于派生类元素在内存中堆放是:前N个是基类的元素,N之后的是派生类的元素. 于是基类的指针就可 ...
- C# 子类实例化基类 基类使用不了子类的方法_C#高级编程面试考题
一.简答题 1.简述C#中的所有访问修饰符及访问权限 private(私有的) 给类,及所有类成员使用 所有类成员的默认访问修饰符 可访问范围 当前类自身 public(公开的) 给类,及所有类成员使 ...
- C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记09--构造方法/析构方法/继承/多态/封装...
一.构造方法 当创建一个类时, 系统会自动创建一个默认的无参构造方法, 这个方法和类同名, 在创建对象的时候自动调用. 默认的构造方法里面什么也没有, 重写之后就可以在创建对象的时候同时搞点事情了. ...
- C# 子类实例化基类 基类使用不了子类的方法_老话题:6个方法,检验你有没有正确使用设计模式...
方法一:设计模式是为了消除继承 大部分设计模式,是让你在在面向对象的基础上尽量消除继承的手段.所以,如果你用了一些设计模式,减少了继承,那你八成用对了.如果你用了一大堆设计模式,然而继承却越来越频繁, ...
- C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记11--接口/泛型
一.接口 1.1简介: 接口是一种特殊的引用类型, 和类很相似. 它定义了属性, 方法, 事件, 这些都作为接口的成员/ 接口中只包含成员的声明, 成员的定义是派生类的责任(谁继承谁实现). 接口在某 ...
- java子类怎么编译_java – 无法编译从基类实现抽象方法的子类
编译我已经定义的基类的子类有一个问题,它有一个单独的方法,而每个子类都实现了抽象基类方法,但是 javac说他们甚至没有在子类中明确定义它们. DbModel.java(基类) package com ...
- 为什么父类引用可以指向子类对象 子类引用不能指向父类对象 泛型
假设有父类Fu ,其子类为Zi ,从对象的内存角度,假设Fu类里面的变量占内存2M, Zi 类里的变量占内存1M: Fu f = new Fu ();//系统将分配2M内存 Zi z = new Zi ...
最新文章
- 【一天一个shell命令】文本操作系列-touch
- Apache Artemis —— 非堵塞 Java 嵌入消息服务
- C#编程语言之获取文件编码格式(转载)
- optee3.8 qemu_v8的环境搭建篇
- 符号常量和变量有什么区别_“变量”和“常量”,计算机程序中的那个“量”是什么“量”...
- ITK:可视化静态稀疏Shi 2D水平设置图层
- plex实现流媒体服务器_Plex继续远离服务器,提供网络节目
- 联想r630服务器开启虚拟化,整合虚拟化 联想万全R630服务器上市
- Swagger天天用,但它背后的实现原理很多人都不知道!
- 精品软件 推荐 瑞星个人防火墙V16 新UI、新功能、新体验
- JavaWeb03-HTML篇笔记(二)
- catia中的螺旋伞齿轮画法_CATIA齿轮绘制方法
- 金蝶服务器选项没有账套信息,金蝶财务软件帐套属性设置保存和帐套启用报错的解决方法...
- 后台网站首页设计过程
- springboot集成微信和QQ第三方登录
- 点集拓扑——基本知识点整理归纳
- 电脑无法连接WiFi,一直显示无法连接此网络
- Java 语言中的实例初始化块 ( IIB) 详解
- 【已解决】找到无效的 Gradle JDK 配置(invalid Gradle JDK configuration found)
- 投机者怎么在市场中使用底部放量进行程序化交易
热门文章
- [react] 举例说明useState
- 前端学习(2910):vue的介绍
- [vue] vue如何监听键盘事件?
- [vue] 说说你对SPA单页面的理解,它的优缺点分别是什么?
- 前端学习(2633):父子传值
- 前端学习(2345):项目目录简单介绍
- “约见”面试官系列之常见面试题第六篇说说弹性布局(建议收藏)
- “睡服”面试官系列第八篇之iterator(建议收藏学习)
- 前端学习(310):清除浮动的方法
- spring mvc学习(1):spring jar包