设计模式学习笔记(四)封装、继承、多态、抽象能解决什么问题?
1. 封装(Encapsulation)
所谓封装性,封装也叫做信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者叫函数)来访问内部信息或者数据。
从Java Entity 类的结构上分析,类的成员变量都有get/set方法,而类变量本身都是private私有的。外部仅能通过 set/get 公共方法去操作成员变量,属性不能被直接修改,避免了数据不一致的问题发生。这里也就将该属性的方法和业务细节做了隐藏,使用者不需要了解详细的业务逻辑,只需要根据方法名就知道该方法的作用从而去调用即可。
2. 抽象(Abstraction)
3. 继承(Inheritance)
继承是用来表示类之间的is-a 关系,比如猫是一种哺乳动物。从继承关系上来讲,继承可以分为两种模式,单继承和多继承。单继承表示一个子类只继承一个父类,多继承表示一个子类可以继承多个父类,比如猫既是哺乳动物,又是爬行动物。
编程语言提供特殊的语法机制来支持继承的特性,比如 Java 使用extends 关键字来实现继承,C++ 使用冒号(class B : public A),Python 使用paraentheses(),Ruby 使用 <。不过,有些编程语言只支持单继承,不支持多重继承,比如 Java、PHP、C#、Ruby 等,而有些编程语言既支持单重继承,也支持多重继承,比如C++、Python、Perl 等。
继承最大的一个好处就是代码复用。假如两个类有一些相同的属性和方法,我们就可以将这些相同的部分,抽取到父类中,让两个子类继承父类。这样,两个子类就可以重用父类中的代码,避免代码重复写多遍。
4. 多态(Polymorphism)
- 第一个语法机制是编程语言要支持父类对象可以引用子类对象,也就是 B b = new A() ;
- 第二个语法机制是编程语言要支持继承,也就是类B能使用类似 "extends B" 的语法;
- 第三个语法机制是编程语言要支持子类可以重写(override)父类中的方法。
对于多态特性的实现方式,除了利用“继承加方法重写”这种实现方式之外,我们还有其他两种比较常见的的实现方式,一个是利用接口类语法,另一个是利用 duck-typing 语法。不过,并不是每种编程语言都支持接口类或者 duck-typing 这两种语法机制,比如 C++就不支持接口类语法,而 duck-typing 只有一些动态语言才支持,比如 Python、JavaScript 等。
什么是 duck-typing 语法?
只要两个类具有相同的方法,就可以实现多态,并不要求两个类之间有任何关系,这就是所谓的 duck-typing,是一些动态语言所特有的语法机制。而像 Java 这样的静态语言,通过继承实现多态特性,必须要求两个类之间有继承关系,通过接口实现多态特性,类必须实现对应的接口。
设计模式学习笔记(四)封装、继承、多态、抽象能解决什么问题?相关推荐
- C++学习笔记:(五)继承 多态
目录 7.组合.继承与多态性 7.1 组合 7.2 继承 7.3继承和组合 7.4构造与析构顺序 7.5派生类重载基类函数的访问 7.6多态性&虚函数 7.7纯虚函数和抽象基类 7.8 多重继 ...
- C++学习笔记系列之继承多态
一.移动语义 1.右值引用 有一种机制,可以在语法层面识别出临时对象,在使用临时对象构造新对象(拷贝构造)的时候,将临时对象所持有的资源『转移』到新的对象中,就能消除这种不必要的拷贝. 2. ...
- 设计模式学习笔记(一):抽象工厂
定义: 用于提供一个不需要指定具体的类就能去创建一系列相互关联的对象的接口. UML图: 参与者: 这种设计模式的参与者: 1.抽象工厂(AbstractFactory):声明一个创建抽象产品操作的接 ...
- 面向对象的四大特征 封装 继承 多态 抽象
1.封装 广义: 类 方法 包 的定义本身就是一种封装 狭义: 在设计一个类的时候 将所有的属性设置为私有的 并对各个私有的属性设计相应的 存/取方法 来完成对属性的使用 私有化只能代表封装的特性 可 ...
- (C++学习笔记四)封装的使用
六.封装的使用 1.代码 : #include<iostream> using namespace std;//#define PI 3.1415926 const double PI = ...
- c语言编程 菲薄拉,C语言设计模式-封装-继承-多态
快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们 ...
- 步步为营 .NET 设计模式学习笔记系列总结
设计模式我从开篇到23种设计模式的讲解总共花了进两个月的时间,其间有很多读者给我提出了很好的建议,同时也指出了我的不足,对此我表示感谢,正是由于很多读者的支持我才能坚持的写到最后.在此表示我真诚的谢意 ...
- C++学习笔记【封装、继承、多态】
C++学习笔记 [封装.继承.多态] 个人通过学习C++,手打出了一份27000字C++笔记,包括封装继承多态等面向对象的思想:笔记中包含了大量的代码案例对每个重要的知识点进行了代码演示,通过理论和实 ...
- 大数据笔记8—java基础篇4(面向对象-封装-继承-多态)
面向对象 一.面向对象 1.面向过程 1.2.举例 1.3.总结 二.面向对象 1.简述 2.举例 3.思想特点 2.1.类的定义格式 2.1.1.简述 2.2.2.格式 2.3.3.示例 三.类的使 ...
- 设计模式学习笔记——抽象工厂(Abstract Factory)模式
设计模式学习笔记--抽象工厂(Abstract Factory)模式 @(设计模式)[设计模式, 设计模式中文名, 设计模式英文名] 设计模式学习笔记抽象工厂Abstract Factory模式 基本 ...
最新文章
- 毕业十年后,我忍不住出了一份程序员的高考试卷
- 高效整洁CSS代码原则
- Spring Security基于角色的权限管理
- SAP UI5 初学者教程之十四 - 嵌入视图的使用方式试读版
- 在pom.xml中配置nexus上传地址
- Centos系统修改远程端口
- matlab设置固定的窗宽窗位,如何设定窗宽窗位,附正常人体组织CT值
- Browserslist: caniuse-lite is outdated. Please run next command npm update caniuse-lite browserslis
- Nexus简介及小白使用IDEA打包上传到Nexus3私服详细教程
- Sublime 中快速打开网页
- 数据分析可视化常用图介绍以及相关代码实现(箱型图、Q-Q图、Kde图、线性回归图、热力图)
- mixin 和 mixins 区别 ?
- 如何把手机app的视频下载到手机上?网页上的视频怎么下载?
- 【idea敲代码没有提示解决办法】
- android手机性能,手机性能排行榜2018前十名(安卓)
- jsp与servlet数据交互出现null或???解决方案
- Android视频播放器架构接口的设计
- 免安装Oracle客户端和PL/SQL
- 校区多,客情管理难?看中进教育使用明道云的新解法
- javascript制作省市联动等类似二级目录