java里oop思想_(一)OOP思想详解
1.关于抽象的进步。面向对象OOP的设计思路其实是把“抽象”这种编程方法进行了新的解释说明,把具体的人或事务抽象成了“类”“对象”的形式。
面向对象的主要思想:
万物即对象
程序是对象的组合
每个对象都有自己的空间,可以容纳其他对象
每个对象都有自己的实例
同一类的所有对象都能接收相同的消息
2.对象的接口
通过类构造对象,对象开放给使用者接口,此时使用者可以通过类的对象的接口给对象发出请求。
3.面向对象编程要提供给两个使用者:类的创建者和使用者。类的创建者的职责是从头创建一个类,提供给使用者接口就好,而类的使用者(书中称之为客户程序员)直接拿来接口使用,而不需要了解这个类具体是什么构造。同时类的创建者也不用有顾虑怕类被破坏或者修改。
4.方案的重复使用
我们知道在面向对象中一个类的对象可以置入另外一个类中,这叫做“创建一个成员对象”,在新建类的时候,首先可以考虑把不同类的对象组织起来使用,可以有效减少代码的复杂度,减少不必要的继承。
5.继承的进一步解释
在以前的认识中,继承只是用来创建新类,和旧的类区别开来,书中对创建继承的必要性进行了一定的探讨:
为什么要使用继承:要创建新的类和已有类功能相似,但是有一定的新功能,此时使用继承,把旧的类所有的成员继承到新类中,复制了旧类的接口
如何区分衍生类和旧类:a.为衍生的类增加新的函数,提供新的功能;b.改善基础类的现有函数
6.关于类型的上溯
这个概念这次深刻的理解了。
举例:
此时有一个这样的类的构造:
同时有这样的一个函数:
void doStuff(Shape s){
s.draw();
...
...
}
此时如果定义了新的形状,则只需要指出该形状的类衍生于Shape类即可调用Shape类的函数:
Circle c = new Circle();
Triangle t = new Triangle();
Square s = new Square();
doStuff(c);
doStuff(t);
doStuff(s);
这里把衍生的类当成了它的基础类型处理,这种方法就叫做Upcasting,只需要指出某个类所属的基本类型,即可让它执行基础类的具体功能。
java里oop思想_(一)OOP思想详解相关推荐
- java io字符输出流_灵魂一击!详解Java中的IO输入输出流
什么是流?流表示任何有能力产生数据的数据源对象或者是有能力接收数据的接收端对象,它屏蔽了实际的I/O设备中处理数据的细节. IO流是实现输入输出的基础,它可以很方便地实现数据的输入输出操作,即读写操作 ...
- java基础代码实例_基础篇:详解JAVA对象实例化过程
1 对象的实例化过程 对象的实例化过程是分成两部分:类的加载初始化,对象的初始化 要创建类的对象实例需要先加载并初始化该类,main方法所在的类需要先加载和初始化 类初始化就是执行方法,对象实例化是执 ...
- Java里format什么意思_java String.Format详解
JDK1.5中,String类新增了一个很有用的静态方法String.format(): format(Locale l, String format, Object... args) 使用指定的语言 ...
- java 内存 开发 经验_七年开发经验详解JVM的GC 算法
概述 GC 是 JVM 自带的功能,它能够自动回收对象,清理内存,这是 Java 语言的一大优势,但是GC绝不仅伴随着Java,相反,GC历史比Java更悠久.关于GC,我认为有四个问题需要解决: 为 ...
- java path类_基于java Files类和Paths类的用法(详解)
Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream; import java.nio.file.FileSystem ...
- java加密算法入门(三)-非对称加密详解
1.简单介绍 这几天一直在看非对称的加密,相比之前的两篇内容,这次看了两倍多的时间还云里雾里的,所以这篇文章相对之前的两篇,概念性的东西多了些,另外是代码的每一步我都做了介绍,方便自己以后翻阅,也方便 ...
- java的数组与Arrays类源码详解
java的数组与Arrays类源码详解 java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 类的 ...
- python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)
这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...
- python加密字符串小写字母循环后错两位_python数据类型_字符串常用操作(详解)
这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...
- Java: static,final,代码块 的详解
Java: static,final,代码块 的详解 每博一文案 山本文绪说过这样一句话:哪些决定放弃了的事,就请放弃得干干净净.哪些决定再也不见面的人,就真 的不要再见面了,不要再做背叛自己的事,如 ...
最新文章
- iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)
- WSS2.0升级到WSS3.0
- 源码时代php中级项目,PHP学科项目评比圆满结束
- 读《JavaScript dom编程艺术(第2版)》笔记 1-2
- 11月深度学习班第5课图像物体检测:rcnn/fast-rcnn/faster-rcnn
- 坑 之 You must feed a value for placeholder tensor ‘label_input‘ with dtype float and shape
- 第一次失效_特斯拉螺栓腐蚀失效分析_搜狐汽车
- webpack 编译stylus_webpack 文档更新日志(9.12-9.29)
- 用python进行归并排序,用Python做归并排序
- 最少拦截系统,简单dp,(学长说这是贪心?!。。。。。。也是醉了)
- python学习笔记(十二)python操作redis
- Spring Cloud与Docker微服务架构实战--阅读笔记
- mysql数据库原理
- 如何将驱动程序静态编译进内核
- 那些年我们一起上过的黑客网站
- Activiti7的进阶使用
- Cors跨域(三):Access-Control-Allow-Origin多域名?
- oracle表同步 job,Oracle中通过Job实现定时同步两个数据表之间的数据
- http://hi.baidu.com/%BE%C5%CC%EC%C4%A7%CA%DE/blog/item/9b3263626a75ff49ebf8f808.html
- JZOJ100047. 【NOIP2017提高A组模拟7.14】基因变异