继承

Java总论及三大特性理解

故事扮演 提交于 2019-11-30 07:34:41
1、对象(object) 万物皆为对象(根类Object类)。 程序是对象的集合(面向对象程序设计语言OOP)。 每个对象都有自己的由其他对象所构成的存储(对象有成员属性)。 每个对象都拥有其类型(每个对象都是某个类class的一个实例instance) 。 某一特定类型的所有对象都可以接收同样的信息(继承)。 2、类型(type) 类描述具有相同特性(数据元素)和行为(功能)的对象集合。是面向对象设计除了基本数据类型外的,一种通用的数据类型。 3、对象作为“服务提供者” 提高对象的内聚性,将对象的设计简化,并凸显其提高的服务价值。 高质量代码的基本要求是:可复用、高内聚、低耦合。 4、封装(信息隐藏) 指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他部分只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流与交互。用户无需知道对象内部方法的实现细节,但可以根据对象提供的外部接口(对象名和参数)访问该对象。 一句话总结: 所谓封装,就是把数据和方法保护在类的内部,只允许可信的类或对象操作,对不可信的进行信息隐藏。 好处: (1)实现了专业的分工。 将能实现某一特定功能的代码封装成一个独立的实体后,各程序员可以在需要的时候调用

Java——面向对象

徘徊边缘 提交于 2019-11-29 23:02:36
Java——理解面向对象 一:什么是面向对象编程? 面向对象编程 ( Object Oriented Programming, OOP ,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的 单元 或对象组合而成。OOP 达到了 软件工程 的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。 面向对象是由OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)三个部分组成。其中,OOA和OOD的结构需要使用一种方式来描述并记录,目前统一采用UML(统一建模语言)来描述并记录OOA、OOD的结果。 Java语言是纯粹的面向对象的程序设计结构,这主要表现在Java的三种基本特征:继承,封装和多态。 目前主流的开发方法是:结构化开发方法和面向对象开发方法。C、Basic、Pascal等都是结构化编程语言,C++、C#、Java、Ruby等都是面向对象的编程语言。 二:程序有哪三种基本结构? 顺序结构,选择结构,循环结构。 顺序结构 :程序中的各操作是按照它们在源代码中的排列顺序依次执行的。 选择结构 :程序的处理需要根据某个特定的条件选择其中的一个分支执行。选择结构有单选择,双选择和多选择三种形式。 循环结构 :程序反复执行某个或某些操作,知道某个条件为假(或为真

深入浅出OOP(四): 多态和继承(抽象类)

早过忘川 提交于 2019-11-28 22:22:48
在本文中,我们讨论OOP中的热点之一:抽象类。抽象类在各个编程语言中概念是一致的,但是C#稍微有些不一样。本文中我们会通过代码来实现抽象类,并一一进行解析。 Abstract Classes 在微软的MSDN中,对抽象类有如下的定义: 用abstract 关键字可定义抽象类,要求其子类必须实现抽象类的函数、属性等。抽象类不可被实例化。抽象类提供了统一的定义,用于其不同子类直接共享数据、函数。 抽象类也可定义抽象函数。 Abstract Classes实战 在Visual Studio中添加Console程序,并命名为“ InheritanceAndPolymorphism ”,添加 ClassA.cs, 添加抽象类 ClassA。 Main(= 编译报错: Compile time error: Cannot create an instance of the abstract class or interface 'InheritanceAndPolymorphism.ClassA' 结论:无法用new关键字来实例化一个抽象类。 Abstract Class的非抽象函数 给抽象类ClassA添加一些非抽象函数的代码: Main(= 编译,依然报错。 抽象类无论是否有抽象、非抽象函数,均无法通过new关键字来实例化。 Abstract Class作为基类 我们把抽象类作为基类

深入浅出OOP(二): 多态和继承(继承)

夙愿已清 提交于 2019-11-28 22:22:34
本文是深入浅出OOP第二篇,主要说说继承的话题。 继承的介绍 在OOP中,继承有如下的定义: 继承是一种OOP的机制,用于派生继承预定义的类 在这个继承关系中,预定义的类是基类,新类是子类 继承常常用于实现代码重用 继承允许子类复用基类非private的的数据和方法 继承的实现 创建一个Console工程,命名为 InheritanceAndPolymorphism。添加ClassA、ClassB类,并拷贝下面的代码: x = 在 Program.cs 中,调用ClassA Main(= 如果运行,肯定会报错的。 Error : 'InheritanceAndPolymorphism.ClassA ' does not contain a definition for ' Display1 ' and no extension method ' Display1 ' accepting a first argument of type ' InheritanceAndPolymorphism.ClassA ' could be found 因为我们在ClassA中未定义Display1的方法。 下面我们重写,使ClassA继承自ClassB。 x = 再次运行,结果如下: ClassB Display1 ClassA已经可以访问其基类的Display1函数了

《编写可维护的 JavaScript》读书笔记第11章:不是你的对象不要动

半城伤御伤魂 提交于 2019-11-27 16:45:50
1. 什么是你的 只要维护代码是你的责任,那么你就拥有这些对象。 如果你的代码没有创建这些对象,不要修改它们,包括: 原生对象(Object、Array 等) DOM 对象(例如,document) 浏览器对象模型(BOM)对象(例如,window) 类库的对象 2. 原则 把已存在的 JavaScript 对象如一个实用工具函数库一样来对待。 不覆盖方法 不新增方法 不删除方法 2.1 不覆盖方法 // 不好的写法 document._orginalGetElementById = document.getElementById; document.getElementById = function(id) { if (id == "window") { return window; } else { return document._originalGetElementById(id); } }; 在一个大型的项目中,一个此类问题会导致浪费大量时间和金钱。 2.2 不新增方法 为非自己拥有的对象增加方法,会导致命名冲突。因为一个对象此刻没有某个方法不代表它未来也没有。如果将来原生的方法和你的方法行为不一致,你将陷入一场代码维护的噩梦。 大多数 JavaScript 库代码有一个插件机制,允许为代码库安全地新增一些功能,这是最佳最可维护的途径。 2.3 不删除方法