对这个概念,开始的时候没必要花太多时间去钻研,
能够理解就行.这个问题,是需要开发的实践中慢慢剖析的
下面我给你做个浅谈!
-------------------------------------------------------------------------------
不知道有没有把抽象类和接口放在一起理解过
抽象侧重于对象,接口侧重于对象的功能
-------------------------------------------------------------
抽象类:概括出了不同对象的公有属性,使别人能够大致的去了解那是一个什么样的对象.并依据这些资料,来详细设计的一种概念.
---------------------------------------------------------------
还拿常用的例子:比如动物,动物有血有肉,有生命,有感情,有名字,有性别......
当你看到"动物"这个抽象概念的时候,可能没有想这么多.但是在潜意识里,是认同这种观点的
-----------------------------------------------------------------------------------------------------------------------
接口:java中有时候称它为特殊的抽象类
接口也有抽象方法,并且方法必须是抽象的.
----------------------------------------------------
接口侧重与对动作的"抽象".它是只能证明动作的存在,但不去实现动作的具体形式
所以,听起来,它好像没有对象.也就是说没有现实生活中的实物存在.没有对象接口也就没有了它存在的实际意义!所以它是服务于对象的.是抽象类的一种补充.
而事实上,接口的应用远远超出了这个范围.有时候甚至比抽象类还要重要!
---------------------------------------------------
还拿常用的例子:动物有声音,有行为,有思想.......,这些抽象出来.设计成接口.来表示对动作的一种抽象!侧重点的同时.区别也就出来了.不是动物就不代表没有动作.机器人,也有动作也有行为.植物也有动作也有行为.所以这个动物的接口,它的试用范围就跳出了这个动物的抽象概念.
---------------------------------------------------
打个疑问:耳机可以到处使用,是耳机实现了机器的接口,还是机器实现了耳机的接口呢!
---------------------------------------------------------------------------------------------------------------
到这里差不多能分清一点头绪.抽象类是对象的抽象.接口是对象动作的抽象(有生命和无生命共有的属性)
哪个对象需要表名自己的身份,可以继承抽象类,如果想表名自己的能力.可以去实现接口!
对象只能有一个基类,但是确可以实现很多接口.对象是死的.能力是无限的(java面相对象!)
继承了同一个抽象类,那么这些子类,就可以共享基类的资源.同时也有了一个管理的标准.
在传递参数的时候,可以让基类站出来做代表.但是它只负责自己被子类所继承的属性!
由于不同对象,如果他们的基类相同.他们就具有了共有资源.也就是说.他们之间能够进行有限制性的相互转换.可以根据需要,有限制的进行强制转换!
这就是,一个子类只能继承一个基类.一个基类可以被多个子类继承.子类可以做为基类,被另外的子类继承.
----------------------------------------------------------------
当抽象类,把所有子类,限制在一个超类的范围内的时候.
接口就实现了空前的开放!
接口不限制谁去实现它,不限制一个类实现多少个接口.
而且只要实现这个接口,你就必须去实现它的抽象方法.(强制性的)哪怕空实现
--------------------------------------------------------------------------------------------------------
但是有一点,一旦这些类实现了这个接口.那么这个接口,就拥有了和基类几乎相同的权利.
它的引用可以指向任意一个实现这个接口的类的对象.它在增加对象的功能的同时,它通过行为管理了很多对象.实际上是"限制"了很多对象.不管这些对象是不是一个"家族"的(多态)
----------------------------------------------------------------------------------------------
如果一个类实现了一个接口,但是并不实现接口的某个类,那么这个类也是抽象类!
但是不能因为这个就下定义认为接口的应用超过了抽象类!.因为飞机飞的再高,也是没有智慧!
--------------------------------------------------------------
回头,再看,抽象类为什么有自己的抽象方法,不是也可以去抽象动作吗?
没错,抽象类,也可以有自己的抽象方法.不是有的时候,而是很多时候.
甚至看上去可以不需要接口.在这里没什么可争执的.
技术是用来方便和促进生产的,生产力要适应生产方式才行
------------------------------------------------------------------------
在需要它的时候,它能适时的出现,并能为开发发挥非常优秀的性能.那才是它的价值
就好像写一个HelloWord一样,没人要求里面有几个方法,没人要求用什么变量
是private的还是public的.索性添上一个static void方法,再加个别的什么变量.也没人指点什么
因为,它的意义只在于测试你的jdk或者一个"入门"
-----------------------------------------------------------------------------------------------------------------------
你再在百度搜点别的对比理解一下就差不多了
认真看三到五篇,对这个概念的解析.看一两个简单的例子,就差不多足够了
温馨提示:答案为网友推荐,仅供参考