对java学习过程的见解

对java学习过程的见解

从学习java以来,见过做过各种各样的项目,在和一位老师交流java学习时,有了更深层的java编码感触对于java编程我们大概会经过以下几个阶段:

  1. 面向对象

  2. 面向切面

  3. 面向抽象

  4. 面向接口

  5. 面向对象

面向对象

一开始当然初入Java坑时理所应当觉得是面向对象的,不管是书本上教学还是自己实际创建类出来的类都会不断地进行类似以下代码的各种处理

String id = "Hello World";
String a = id.subString(0,1);

我们当然会认为代码中的id,a等就是对象,这是对于一个类而言,也是对java最基本的认识

在学习完SE阶段熟悉各种基本操作后大概会认为我们编码的类就是一个对象

面向切面,抽象,接口

进入开发之后,随着代码量的提高,就会开始对面向切面,面向抽象,面向接口更加了解

通常开发中后端常用模块分为controller service dao pojo。。。这时面向切面编程的思想就初具雏形

我们可能最开始在开发中编写controller层调用service层进行操作,在这时我们就会发现后端的service层其实和工具类一样,只需要我们进行调用而不关心其处理流程

但service层的开发也是逐渐发展过来。在我编写代码时会首先定义service接口,并定义其实现类impl对其实现,在调用时只需调用其接口即可由Spring完成方法的调用,这就是面向接口编程。

但在这其中并没有体现面向抽象。原因应在最开始编码定义的规范

在早期开发中,定义完成接口后首先会定义抽象类对接口进行初期实现,然后在定义具体实现类进行具体方法实现,但是在这期间人们发现对于抽象类的编写似乎意义不大,便省略了接口的开发。

对于一个小型项目而言,可能每个层都能看成对象

面向对象

随着编程时评的提高,就会接触到各种分布式框架定义的项目,这时我们发现一个大型的项目里面可能有许多个小项目聚合而成,每个小项目之间又有着种种关系,子父工程,兄弟工程等等,每个工程可能只定义了controller层,或是service,或是util等等,其间各种依赖错综复杂

这时可能会觉得,每个工程就是一个对象,但是在以后编写项目时,思考类似tx游戏,不管是英雄联盟,穿越火线,qq飞车等等,他们都用了统一的qq登录进行管理,也就是说每个不同项目之间也可能会有种种联系,或是数据库的表管理,或是模块依赖等。大概这时我们就认识到了为什么说java万物皆对象

随着写下对java接口以及抽象类的认识

在网页进行搜索“接口抽象类的区别”,有许多类似下面的回答:

1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

2、抽象类要被子类继承,接口要被类实现。

3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现

4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果

7、抽象类里可以没有抽象方法

8、如果一个类里有抽象方法,那么这个类只能是抽象类

9、抽象方法要被实现,所以不能是静态的,也不能是私有的。

10、接口可继承接口,并可多继承接口,但类只能单根继承。

这些当然都是"官方的“回答,在日常代码编写中,我们会深有体会:

接口定义了“做什么”
抽象类定义了“怎么做”

我们假若"盖房子"为实现的功能,那么接口则定义盖房子要搬砖,要和水泥,要架钢筋等等,但是怎么做不去定义

而抽象类定义的就是基本的实现方法,怎么板砖,去哪搬,怎么架钢筋等等。

还记得学习线程时听过这样的叙述:“能实现Runnable尽量用Runnable接口,尽量不用继承Thread类,因为继承Thread会继承Thread的完整体系”。讲的大概就是这个意思。

如果有写的不好或是不对的地方还请帮我指正~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值