这几年看了不少的博客,现在有点空闲时间,准备写点关于java基础的方面的文字,一方面是为了感谢其他大牛的博客给我的启发,另一方面是为了总结一下自己在javase方面的知识,本人基础薄弱,难免有遗漏或错误之处,还请大家多多拍砖。上面是例行开篇语,正文开始啦。
我准备开一个关于javase系列的文章,最主要是以java编程思想(第四版)这本书为主线,其他的参考疯狂java讲义,java核心技术,还有java编程思想(第三版),本人呢,语文就从来没及格过,所以这有啥错别字,语言逻辑错误啥的,还请大家多多见谅,多多指教。
闲话少说,开始言归正传吧。java这本书是以一切都是对象这本书为开头的,不同于我们所学的正常书籍,一般都是从语言的基础,或者说是语言的基础,起先我就在想这本书在是不是为初学者准备的,其实在看了目录、前言,这本书的对象应该是为了一些从c语言等没有用面向对象语言的读者写的,也就是说这本书的主要面向是有一定编程经验的程序员而写的,所以呢,我写这些文章的主要目的是为了一些对java基础不熟悉的朋友而写,当然你要是大牛,也可以来瞄瞄,有你认为你错误的,就请你给指出来吧
这本书的开篇就是介绍,对象入门的,不过我没有结构化编程的经验,虽然学过c语言,但是肯定没有在实际的编码经验中感受到c语言的优点或缺点,所以嘛就直接贴出来吧。
面向对象编程(OOP)具有多方面的吸引力。对管理人员,它实现了更快和更廉价的开发与维护过程。对分析
与设计人员,建模处理变得更加简单,能生成清晰、易于维护的设计方案。对程序员,对象模型显得如此高雅和浅显。此外,面向对象工具以及库的巨大威力使编程成为一项更使人愉悦的任务。每个人都可从中获益,至少表面如此。
如果说它有缺点,那就是掌握它需付出的代价。思考对象的时候,需要采用形象思维,而不是程序化的思
维。与程序化设计相比,对象的设计过程更具挑战性——特别是在尝试创建可重复使用(可再生)的对象
时。过去,那些初涉面向对象编程领域的人都必须进行一项令人痛苦的选择:
(1) 选择一种诸如Smalltalk 的语言,“出师”前必须掌握一个巨型的库。
(2) 选择几乎根本没有库的 C++(注释①),然后深入学习这种语言,直至能自行编写对象库。
接下来说到抽象了,大家都知道面向对象编程的三大特点是,封装继承,多态。所以抽象不是面向只在面向对象里有的,我记得在一本书里看到抽象是一种规范和分离的设计哲学。
抽象类从语义上来说,是从多个具体类中抽象出来的父类,具有更高层次的抽象,从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模版,从而避免了子类设计的随意性。
抽象类体现的是一种模版模式的设计,抽象类作为多个子类的通用模版,子类在抽象类的基础上进行扩展,改造,但子类总体上会大致保留抽象类的行为方式。而接口是一种更为彻底的抽象。
但是在这本书中介绍抽象的好处,最开始的程序设计是在机器模型(方案空间)与实际解决问题的模型(问题空间)之间有程序员来建立一种联系,有此造成了脱离了代码的编程语言本身的范围,造成程序代码很难编写,而且要花较大的代价进行维护。而面向对象的程序设计在此基础上则跨出了一大步,程序员可利用一些工具表达问题空间内的元素。由于这种表达非常普遍,所以不必受限于特定类型的问题。我们将问题空间中的元素以及它们在方案空间的表示物称作“对象”(Object)。
在应用中具体来说就是可以灵活的运用多态,具体的细节问题我们在多态里来说。抽象类和接口具体的定义我就不打了,大家在网上一搜很多的。
下面我来解释下为什么是这样的要用这些关键词呢?
abstract(抽象)最主要的是为了通知JVM这是一个抽象类不允许创建对象,其实我以前也是把这些关键字看的无比神圣,其实这些关键字都是前辈们在无数次的经验中进行总结的,所以我们可以把这些关键字想为语言的设计者们想要做什么,这样转换成自己的理解,这样就好记住了。说多了,有点跑题了,于是JVM在编译检查时,看这个类是不是有这个词,如果没有这个词,但是里面还有没有实现的抽象方法是时系统就报错,抛出一个异常。所以我们在继承虚拟类的时候或者在实现接口的时候必须的把里面的抽象方法全部实现,不然肯定会报错的。
抽象类同正常的类相比,多了可以在类里有抽象方法,少了不能用new创建对象,但是可能有的朋友会问,既然不能用new创建对象,那么构造器有什么用呢,其实构造器可以由抽象类的子类来调用,具体的怎么调用,在初始化顺序的时候,再跟大家细说。
现在再来说说接口,接口中默认的是访问权限是public,这是为什么呢,因为接口必须得被实现,接口前面说了是一种更高层次的规范。
在接口中可以有常量,方法,内部类枚举类(貌似在内部类只能是静态内部类,如果有其他类,欢迎指教)还有在接口内的内部类,和枚举量,常量,都是系统自动会加上 static 和final 关键字。
其实我在接口方面还是有疑问的,如果一个类实现了多个接口,或者实现了一个内部类和一个接口,他们都含有一个相同的虚拟方法,那么在子类中实现了这个方法,这个方法算谁的呢。
好了,关于抽象这个写到这就算完了,如果还有其他什么疑问,请留言。
转载于:https://blog.51cto.com/pfdgcs/1197914