面向对象编程(精华篇)

news/2024/7/3 12:24:47 标签: 多态, 数据结构, java, python, 编程语言

适合于对软件开发感兴趣的初学者(初学者的福利)

掌握面向对象思想

f9e0b91fb411e0aafee593e98bb33ff1.png

面向对象特性

28f07bb8aa7e6a3a4abd3645a008f6e1.png

面向对象知识点全解

a9738ae660ab2b4b173bff8fbb9045c2.png

84adee785f75640cf71e51b9fef90da1.png

1.面向对象编程的最基本特征在于其封装性和继承性,通过封装能使对象类的定义和对象的实现分开,通过继承能体现类与类之间的关系,由此二引出其多态

2.多态

可用"一个对外界面,多个内在实现形式"来表示。Java通过方法重载和方法重写以及接口来实现多态

3.多态是面向对象的重要特性,简单点说:"一个接口,多种实现",就是同一种事物表现出的多种形态。

4.多态允许将子类的对象当作父类的对象使用,某父类型的引用指向其子类型的对象,调用的方法是该子类型的方法

5.面向对象的三大特性

封装、继承、多态

6.多态的定义

指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。

7.多态的作用

消除类型之间的耦合关系

8.多态分两种

(1).编译时多态:编译时动态重载

(2).运行时多态:指一个对象可以具有多个类型,方法的覆盖

9.多态的好处

(1).可替换性(substitutability)多态对已存在代码具有可替换性。

(2).可扩充性(extensibility)多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。

(3).接口性(interface-ability)多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。

(4).灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。

(5).简化性(simplicity)多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

10.结构化程序设计语言

数据结构+算法

11.面向对象程序设计语言

(数据结构+算法)类+(数据结构+算法)

12.所有面向对象程序设计语言的三大特点

(1).类

把一类具有共同属性和特征的事物抽象归纳的形式。一个集合,也就是所谓的类。

(2).类有哪两方面的特征

静态特征和动态特征

静态特征

体现在类的属性,也就是类的成员。

动态特征

体现在类的动作,也就是类的成员方法。

(3).多态(静态多态、动态多态)

13.继承

(1).公有继承

除了私有的不能继承,原来是什么权限,继承以后依然还是什么权限。

(2).保护继承

除了私有成员不能继承以外,所有继承的成员变成了保护权限。

(3).私有继承

除了私有成员不能继承,所有继承的成员,全部变成了私有权限,私有继承能继承保护成员,也能继承公有成员。

14.常用关键字的用法

public

类的内部和类的外部都可以访问

private

只有类的内部可以访问

protected

表示只有类的内部可以访问

static

修饰类的成员

(1).静态成员方法

作用:声明该方法为整个类所有,不为某一具体类对象所有

特点:不能访问非静态成员变量

(2).静态成员变量

作用:声明该变量为整个类所有;

特点:初始化只能只能放在类外,类型  类名::变量名 = 初始值

(3).静态全局变量

限制该全局变量的作用域只限于本文件,不能通过extern关键字声明为其他文件所用

(4).静态局部变量

扩大了该局部变量的声明周期,从应用程序开始到程序结束。

(5).静态全局函数

限制该全局方法的作用域只限于本文本,不能通过extern关键声明为其他文件所用

9c216eaea7f771d3bf4c6831edfd804d.png

extern

声明外部全局变量或者全局函数为本文件所用,尽量不要在头文件中定义变量和函数

volatile

(1).volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。

(2).作用

表示用volatile定义的变量会在程序外被改变,每次都必须从内存中读取,而不能把他放在cache或寄存器中重复使用, volatile可以保证对特殊地址的稳定访问,不会出错。

(3).表明某个变量的值可能在外部被改变,因此对这些变量的存取不能缓存到寄存器,每次使用时需要重新存取。该关键字在多线程环境下经常使用,因为在编写多线程的程序时,同一个变量可能被多个线程修改,而程序通过该变量同步各个线程。

(4).编译器优化介绍

内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:将内存变量缓存到寄存器;调整指令顺序充分利用CPU指令流水线,常见的是重新排序读写指令。

(5).volatile的使用情况

1).中断服务程序中修改的供其它程序检测的变量需要加volatile

2) 多任务环境下各任务间共享的标志应该加volatile

3).存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义

4).并行设备的硬件寄存器(如:状态寄存器)

5).一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

6).多线程应用中被几个任务共享的变量

final的用法

final类不能被继承,没有子类,final类中的方法默认是final的 

final方法不能被子类覆盖,但可以继承 

final变量/常量只能一次赋值,不可更改 

final不能修饰构造方法

final参数

当方法参数为final类型时,可以读取使用该参数,但是无法改变该参数的值

static final的用法 

(1).对于变量,表示一旦给值就不可修改,并且通过类名可以访问。 

(2).对于方法,表示不可覆盖,并且可以通过类名直接访问。 

(3).对于被static和final修饰过的实例常量,实例本身不能再改变了,但对于一些容器类型(比如:ArrayList、HashMap)的实例变量,不可以改变容器变量本身,但可以修改容器中存放的对象。

15.ArrayList和LinkedList的区别

(1).ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构

(2).对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针。

(3).对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

16.ArrayList和LinkedList在性能上各有优缺点

(1).对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。

(2).在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。

(3).LinkedList不支持高效的随机元素访问。

(4).ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。

(5).总结

当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList。

13a42878aa78cbc4263094972ca8fa82.png


http://www.niftyadmin.cn/n/1781122.html

相关文章

C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe(转)...

出处:http://www.cnblogs.com/yzeng/p/4205533.html 不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载。 今天给大家提供一种方式,直接使用我们的程…

去NM的OKR,大坑,得把人逼疯!

原创不易,求分享、求一键三连两个故事你的OKR是什么之前还在B站时,我这边刚成立了一个闭环业务团队,跟Leader汇报想法时,他问了一个问题:你团队的OKR是什么?当时我还是个野路子,管理靠秀操作&am…

SQL2008如何管理对象使用的空间

管理对象使用的空间 “索引分配映射 (IAM)”页将映射分配单元使用的数据库文件中 4 GB 部分中的区。分配单元有下列三种类型: IN_ROW_DATA 用于存储堆分区或索引分区。 LOB_DATA 用于存储大型对象 (LOB) 数据类型,例如 xml、varbinary(max) 和 varchar(…

使用lrucache和diskLrucache实现照片墙

其实,在真正的项目实战当中如果仅仅是使用硬盘缓存的话,程序是有明显短板的。而如果只使用内存缓存的话,程序当然也会有很大的缺陷。因此,一个优秀的程序必然会将内存缓存和硬盘缓存结合到一起使用,那么本篇文章我们就…

21年技术建设复盘

1 前言做一下21年技术复盘,也许有不一样的收获。整个一年,在技术上投入相对更大一些,从小的优化方案到具体系统设计,都有一些投入。那些达到目标,并且比较细小的技术实现,这里就不回顾了,我想复…

static 还是readonly 还是static readonly

一、 static 多对象共享一段空间,或者说没有对象概念,就是类的概念,不需要实例化,自动被创建。多用于长期共享。不会为对象的创建或销毁而消失。 public class C{static A a new A("C 创建A",1111)public A Ci{get{…

PB导出数据excel格式dw2xls

PB导出数据excel格式dw2xls 使用DW2XLS控件 语法 uf_save_dw_as_excel ( dw, filename ) 參数 dw A reference to the datawindow object filename A string whose value is the name of the file you want to create. If filename is not on the operating systems search …

一张图看程序媛阿源的2021个人年度流水账

大家好,我是若川。持续组织了5个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。本文来自读者阿源小…