多态

理解面向对象的语言

孤人 提交于 2019-12-28 05:14:40
前言:我们学习的javascript语言是一门面向对象的语言,所以这一概念我们需要理解与认识!下面是理解性的理论内容,不需要记忆,理解与思考我们的学习才能站在更高的视角! 一、认识: 面向对象是当今主流的一种程序设计理念和设计规范,它取代了早期的"结构化"过程设计开发技术,主张一切皆为对象,程序以人的思维模式去解决问题。面向对像的程序是由类组成的,每个类包含对用户公开的特定功能部分和隐藏的实现部分。传统的结构化程序设计通过设计一系列的过程(即算法)来求解问题。这一些过程一旦被确定,就要开始考考虑存储数据的方式,这就明确的表述了程序员的工作方式。但面相对像却调换了这个顺序,它不必关心数据对象的具体实现,只要能满足用户的需求即可。 从世界观的角度可以认为:    1、面向对象的基本哲学是认为世界是由各种各样具有自己的运动规律和内部状态的对象所组成的;   2、不同对象之间的相互作用和通讯构成了完整的现实世界。   因此,人们应当按照现实世界这个本来面貌来理解世界,直接通过对象及其相互关系来反映世界。这样建立起来的系统才能符合现实世界的本来面目。   从方法学的角度可以认为:   1、面向对象的方法是面向对象的世界观在开发方法中的直接运用;   2、它强调系统的结构应该直接与现实世界的结构相对应,应该围绕现实世界中的对象来构造系统,而不是围绕功能来构造系统。 二、特点:

JAVA的基础知识(一)

半城伤御伤魂 提交于 2019-12-28 02:47:58
1、对象的概念 Java 是 面向对象的编程语言 ,对象就是 面向对象程序设计的核心 。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念 2、对象的特点 对象具有属性和行为。 对象具有变化的状态。 对象具有唯一性 。 对象都是某个类别的实例 。 一切皆为对象,真实世界中的所有事物都可以视为对象。 3、面向对象和面向过程的区别 面向过程:一种较早的编程思想,顾名思义就是 该思想是站着过程的角度思考问题 ,强调的就是 功能行为 ,功能的 执行过程,即先后顺序 ,而每一个功能我们都使用函数(类似于方法)把这些步骤一步一步实现。使用的时候依次调用函数就可以了。 面向过程的设计: 最小的程序单元是函数 ,每个函数负责完成某一个功能,用于接受输入数据,函数对输入数据进行处理,然后输出结果数据,整个软件系统由一个个的函数组成,其中作为 程序入口的函数称之为主函数 ,主函数依次调用其他函数,普通函数之间可以相互调用,从而实现整个系统功能。 面向过程最大的问题在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃。为了解决这一种软件危机,我们提出面向对象思想。 面向过程的缺陷:是 采用指定而下的设计模式 ,在设计阶段就需要考虑每一个模块应该分解成哪些子模块,每一个子模块又细分为更小的子模块,如此类推,直到将模块细化为一个个函数。

面试笔试题

拥有回忆 提交于 2019-12-26 12:13:42
7.假设当前时间为2015年10月1日下午2点30分,下面语句输出结果为 2015-10-1 14:30 SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd hh:mm”); System.out.printIn(sdf.format(new Date())); 8.以下语句涉及类型转换和数字取整,最终i的值为 4 double n = (double)10/3; int i =(int)Math.ceil(n); 9.语句System.out.print(0.05+0.01)输出的结果出现为0.060000000000000005而非是0.06原因是 答:原因是因为就是计算机并不能识别除了二进制数据以外的任何数据,无论我们使用何种编程语言,都要先把源程序编译成二进制的机器码后才能被计算机识别到,浮点数由两部分组成,指数和尾数,如果在这个转换的过程中,浮点数参与计算,那么转换的过程就会变得不可逆,就是在这个过程中,发生了精度的丢失,但是有些浮点计算会得到准确的结果,应该也是最碰巧大那个计算的二进制之间能够准确转换,而当输出单个浮点数数据的时候可以正确输出,double d =2.4;System.out.print(d)输出的是2.4而不是2.3999999999999999,也是就是说

java多态的理解

被刻印的时光 ゝ 提交于 2019-12-26 08:48:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 首先要先知道什么是多态,多态的概念 1.多态的定义: 指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用) 2.多态的作用:消除类型间的耦合。 再说一下三大特性:封装、继承、多态。封装和继承几乎就是为多态服务的。这个一定要记住! 多态存在的三个条件: 要有继承 要有重写,也就是覆盖,这里有些刚学的人会误解方法重写和重载。这个一定要弄明白 a.重写必须继承,重载不用。 b.重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数列表不同。 c.重写的方法修饰符大于等于父类的方法,重载和修饰符无关。 d.重写不可以抛出父类没有抛出的一般异常,可以抛出运行时异常 父类引用指向子类对象 Java中多态的实现方式: 接口实现,继承父类进行方法重写,同一个类中进行方法重载。 多态分为两种: 编译时多态:方法重载 运行时多态: JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。(我们平时说得多的事运行时多态,所以多态主要也是指运行时多态) 最后再说一下多态的好处: 1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环

重写、覆盖、重载、多态几个概念的区别分析

陌路散爱 提交于 2019-12-26 08:46:40
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> override->重写(=覆盖)、overload->重载、polymorphism -> 多态 override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。 重写(覆盖)的规则: 1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载. 2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。 3、重写的方法的返回值必须和被重写的方法的返回一致; 4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类; 5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。 6、静态方法不能被重写为非静态的方法(会编译出错)。 overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。 重载的规则: 1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样); 2、不能通过访问权限、返回类型、抛出的异常进行重载; 3、方法的异常类型和数目不会对重载造成影响; 多态的概念比较复杂

【Head First Java 读书笔记】(七)继承

别等时光非礼了梦想. 提交于 2019-12-25 05:45:08
继承与多态 了解继承 继承的关系意味着子类继承了父类的实例变量和方法。 父类比较抽象,子类比较具体。 继承层次的设计 找出具有共同属性和行为的对象(用继承来防止子类中出现重复的程序代码) 设计代表共同状态与行为的类 决定子类是否需要让某项行为(也就是方法的实现)有特定不同的运行方式,即方法由子类覆盖 通过寻找使用共同行为的子类来找出更多抽象化的机会。 “是一个”与”有一个” 当一个类继承自另外一个类时,我们会说这是子类去继承父类。若你想要知道某物是否应该要继承另一物时,则可以用is-a测试来检验。 is-a测试适用在继承层次的任何地方。如果你的继承层次树设计得很好,那么多有的子类都应该通过任意个上层父类的IS-A测试。 如果类Y是继承自类X,且类Y是类Z的父类,那么Z应该能够通过IS-A X的测试。 子类能继承下来哪些东西? 4种权限:private default protected public 存取权限(access level)控制了谁可以接触什么。 public类型的成员会被继承 private类型的成员不会被继承 要点: 子类是extends父类出来的 子类会继承父类所有public类型的实例变量和方法,但不会继承父类所有private类型的变量和方法 继承下来的方法可以被覆盖掉,但实例变量不会被覆盖掉 使用is-a测试来验证继承结构的合理性 is-a关系是单方向的

继承和虚函数

耗尽温柔 提交于 2019-12-25 01:30:04
虚函数 特征 1.构造和析构中会填写虚表指针 先调用父类构造,先填写父类虚表指针,再执行父类构造函数体 后调用子类构造,填写子类虚表指针,执行子类构造函数体 析构与上述相反(先子类,再父类) 2.虚表特征 虚表存放在只读数据区 虚表中每个成员都是成员函数指针 3.以填写虚表为界限 填写虚表上面是初始化列表 填写虚表下面是构造/析构函数体 4.当有虚表的时候,默认就会提供构造 其他补充 1.如何快速判断一个带有虚函数的类的继承层次? 在虚表指针的地方下硬件写入断点 断点来N次,说明有N-1个父类,减一因为自己也会填一次虚表指针 2.构造析构里调用虚函数会如何? 多态会失效 原因:防止父类调用到子类虚函数,子类在未构造的情形下,会调用到未初始化的资源 编译器优化两种方案: 构造或析构里调用虚函数为直接调用call address(直接绑定地址) 构造或析构里调用虚函数,但仍为本类的虚函数(因为虚表指针此时指向的虚表是自己的) 来源: CSDN 作者: code_greenhand 链接: https://blog.csdn.net/qq_35426012/article/details/103690290

WinForm设计随笔

╄→гoц情女王★ 提交于 2019-12-24 18:55:26
WinForm 1.健壮性 处理异常输入 完善判定条件:考虑边界条件和范围超出 2.高内聚低耦合 抽象思维 精简类的功能 封装、继承、多态(参见 C#多态:重载、虚方法、抽象类和接口 ) 参考23种设计模式 3.关闭修改,开放扩展 不应该修改已实现 使用继承多态等特性扩展接口的实现 4.代码简洁 简洁通常意味着高效 易读易维护 使用语言特性而非类库以简化代码 5.不应该为了设计而增加设计 非必要的情况下,过多的“设计”会增加代码的复杂性和维护难度 不应为拓展预留接口,除非拓展真的出现或者拓展是已知必须的 6.不应该在UI线程进行耗时操作 耗时操作放在其他线程中,防止阻塞UI 在其他线程更新UI时,必须使用委托,使得UI的更新在UI线程进行 来源: CSDN 作者: Leo-夜空 链接: https://blog.csdn.net/weixin_43104399/article/details/103686086

c++设计模式学习笔记1--总领原则

梦想与她 提交于 2019-12-24 15:47:57
可复用、可扩展、可维护、灵活性好 电脑=硬盘+光驱+内存+显卡+CPU+显示器;可扩展(加内存条)、可复用(显示器用在其他电脑上)、可维护(更换其中的硬件而不是换电脑)、灵活性(硬件都可组装到其他电脑上)。 面向对象三大特性=封装+继承+多态 。 封装(就是把客观事物封装成抽象的类,使得业务逻辑与界面逻辑分离,降低耦合性,易维护和扩展);继承(子类属性从祖先类继承);多态(多态指的是同一种事物的多种状态。水这种事物有多种不同的状态:冰,水蒸气) PS:开始写这一系列设计模式博客是因为自己之前学过,但都已忘记不得不重新学!也是为了自己不用再花费这么多的时间再写。 来源: CSDN 作者: kiwen_su 链接: https://blog.csdn.net/kiwen_su/article/details/103682107

C++对象模型:单继承,多继承,虚继承

泄露秘密 提交于 2019-12-24 14:13:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 什么是对象模型 有两个概念可以解释C++对象模型: 语言中直接支持面向对象程序设计的部分。 对于各种支持的底层实现机制。 类中成员分类 数据成员分为静态和非静态,成员函数有静态非静态以及虚函数 class data members:static和nonstatic class data functions:static、nonstatic和virtual 比如: class Base { public: Base(int i) :baseI(i){}; int getI(){ return baseI; } static void countI(){}; virtual void print(void){ cout << "Base::print()"; } virtual ~Base(){} private: int baseI; static int baseS; }; 对象模型分类 简单对象模型 :这个模型非常地简单粗暴。在该模型下,对象由一系列的指针组成,每一个指针都指向一个数据成员或成员函数,也即是说,每个数据成员和成员函数在类中所占的大小是相同的,都为一个指针的大小。这样有个好处——很容易算出对象的大小,不过赔上的是空间和执行期效率。所以这种对象模型并没有被用于实际产品上。 表格驱动对象模型