java类库里有的是实体类有的是抽象类有的是接口,有什么讲究吗?

我们学习java,必不可少内容的除了面向对象思想就是类库了,类库中有的类是实体类,比如Throwable,有的是抽象类,比如Inputstream,有的是接口,比如Runnable,抽象类比实体类抽象,同时接口也比抽象类更加抽象。
我在学习的时候老师提出这样一个问题,为什么SUN公司在创造Java的时候,有的要写成实体类,有的要写成抽象类,有的则要写成接口?
其中一个有很多年开发经验的人回答令我们所有人印象深刻,她巧妙得用公司的职位来进行类比,把实体类比喻成基层员工,抽象类比喻成中层管理者,而接口则比喻为公司的高层管理者,越是抽象的类,层级越高。
抽象类和接口是不能直接干活的,必须得继承!必须有实体类继承抽象类或者是接口并实现其中的函数才可以干活,在新建对象的时候你是不能直接new一个抽象类或者是接口的,当然了,你如果要较真,内部匿名类可以帮助你克服这个强迫症, java中函数重写这一功能大大的提升了函数的生命力,接口和抽象类正是因为继承和函数重写的功能可以像公司的管理层一样只需要发号施令(写好函数),直接让下面的员工(实体类)干活一样。
这个问题一直萦绕在我的心头,后来随着敲代码的体量在增加,以及计算机和数学知识的积累,我总觉得这个问题还有一个思路,这也是我最近从数学上得到的灵感,同时我觉得我的想法比把类比喻成职位更贴近计算机的思考方式。
我的想法就是:越是抽象的,应用越广泛!!!
写成实体类的话只能负责一种功能,而写成抽象类,就可以通过继承的方式将这个抽象类进行延伸,我为什么这么说?因为Sun公司写了“extends”,这根本就不是继承的意思,是延伸的意思!翻译成继承并不准确。而写成接口呢?延伸的范围更广!因为继承接口其实是在实现接口的某一功能并不是全权继承,我为什么这么说?因为Sun公司写了“Implements”。我在思考出来写一点之后我一下子就理解了java创始人为什么说“再给我一次机会,我会把70%的类写成接口”。
当时老师为了讲清楚继承抽象类和继承接口的区别还举了智能洗衣机的例子:智能洗衣机首先得是一台洗衣机,那么就得先继承洗衣机类(抽象类),而为了让这台洗衣机是智能的再继承智能类(接口)。
我认为,类的作用在于多了一层封装,面向过程的语言最高一层封装就是函数了,所以面向过程的语言根本没有类库可言,把特定的属性和函数再封装一层,这一层就是类,这样新建了这个类的对象之后就可以随心所欲的使用这个类里的属性和函数了,只有面向对象的语言才有类库,而类库越丰富越强大,这个语言就越容易学习,没错,我说的就是Python,这也是我最近思考的结果。

猜你喜欢

转载自blog.csdn.net/weixin_46107282/article/details/113356476