目录
1.抽象类
2.接口
3.区别
4.附录
1.抽象类
1.1什么是抽象类
抽象类是一个类,它由一些抽象的方法和属性组成。所谓抽象的方法就是一些只定义了方法的基本信息(如方法名,返回类型,参数信息
),而没有具体实现的代码的方法。
当然,上面的是一般情况,如果你非想要在某个方法内添几行实现代码,那也并非不可以,不过添了代码的方法就不是抽象方法了。
由于抽象类中一般都不给予方法的实现,所以实例化也就没有任何意义,因此,抽象类被限制为不可以进行实例化。
1.2为什么要用抽象类
那为什么要引出抽象类这么个东西呢,它能完成哪些类干不了的事呢?
干巴说没啥意思,我举个例子吧。
比如说有个苹果类,它有个吃的方法,代码是洗了就可以吃。那它就可以生成实例,苹果一,苹果二,它们都有个吃的方法,都是洗了就
可以吃。
再比如说有个香蕉类,它也有个吃的方法,代码是扒了皮再吃。也可以生成实例,香蕉一,二,三,都是扒了皮吃。
然后又有个抽象类,叫水果,它也有个吃的方法,但是是空的,因为不同的水果有不同的吃法。
这样我们就可以看出来,水果这个抽象类没法实例化,因为它没法具体到一样东西,而苹果和香蕉就可以继承这个抽象类,并可以实例化
成每个苹果,香蕉。
事实上抽象类就是某些类共有的属性和方法的集合,其他类继承这个抽象类,其优点是当需要对这些类的共有属性做修改的时候,只需修
改这个抽象类就可以了。
2.接口
2.1什么是接口
接口是一些严格限制的方法的集合。这些方法只包括一些特征:方法名,参数的数目和种类,且这些方法只能是抽象的和公开的。
也就是说接口中的方法不仅没有具体实现的代码,连返回类型都没有了。并且这些规定是严格的,说不能有,就是不能有(返回类型可以
有),不向抽象类那么好说话。
接口的规定这么严格,自然也是没法实例化的,其实和抽象类一样,接口实例化了比抽象类还没意义。
另外java接口不能有构造器。
2.2为什么要用接口
为什么要用抽象类我们知道了,但又为什么要引入接口这个东西呢?它又能为些什么常人所不能为的事呢?
事实上,在JAVA中,因为一些原因,只提供了单继承这样一种继承方式,那就带来一个问题,我有个东西,他不只有你这么一个抽象类的
特点,还有别的抽象类里的特点,那你又不提供多继承,怎么办?于是在群情激愤中,众望所归的接口就横空出世了。
接口解决了多继承的问题,一个类可以实现多个接口,同时也可以实现一个抽象类。
同样,干巴说一直不是我的风格,我举个例子。
比如说我有个抽象类-人,然后有个类-中国人继承了这个抽象类,但是我现在不只想生成一个中国人类,我想生成个中国的飞人类,但人
这个抽象类中并没有飞这个方法,我们又不能再去继承个鸟的抽象类去,所以就去继承了个带飞的方法的接口,于是——超人,诞