Java中接口和抽象类

前言

经常看到关于Java中的接口和抽象类的比较,看着这两难兄难弟确实还是有些像,又有些不想,借此,想好好总结下他们两。

关于抽象类

在Java中,抽象类是以abstract关键字修饰的。有抽象方法的一定是抽象类,反之,抽象类不一定有抽象方法,这句话是《Java编程思想》这本书中提到的,说的是只要是被关键字abstract修饰的类都叫抽象类,而不管这个类中是否含有抽象方法。抽象类的定义格式为:

1
abstaract class ClassName{}

抽象方法: 抽象方法是一种特殊的方法,只有方法的声明,但是没有方法的实现。抽象方法的声明格式为:

1
abstract void function();

抽象类是为了继承而存在的,抽象出子类共有的一些特点,然后交给其具体的实现。

抽象类并不一定包含抽象方法,它和普通的类一样,也是可以拥有成员变量和普通的成员方法。

抽象类和普通的类的三点区别:

  • 抽象方法必须为public或者protected,缺省默认为public。

  • 抽象方法不能用来创建对象。

  • 如果一个类继承自一个抽象类,那么需要实现这个类的所有方法,如果没有实现这个类的所有方法,那么该类也需要被定义为abstract。
    TIM截图20180801205707

另外抽象类是可以有构造器的。

关于接口

接口(interface)是对行为的抽象。在java 中定义一个接口的方式如下:

1
interface InterfaceName{}

接口中可以含有方法和变量。其中变量会被隐式的指定为public final static 类型。其中的方法会被隐式的指定为public abstract,且不能有方法的实现(“Interface abstract methods cannot have body”)。

实现一个接口需要用到implements关键字

1
class ClassName implements InterfaceA,InterfaceB{}

一个类可以实现多个接口。如果一个抽象类implements某个接口,可以不实现这个接口中的方法。非抽象类implements某个结构就必须要实现该接口中的所有方法。

抽象类和接口的区别

区别之处:

1、接口中的所有方法都是隐含的abstract的,而抽象类亦可以同时包含抽象和非抽象的方法。

2、一个类可以实现很多接口,但是只能继承自一个抽象类。

3、类可以不实现抽象类和接口中的所有方法,这种情况下的类需要被声明为abstract。

4、接口中的变量都是被默认声明为public static final的,而抽象类中的成员变量可以是各种类型的。

5、Java接口中的成员函数默认都是public的,抽象类中的成员函数可以是private、protected、public的。

其他:

1、接口是可以被接口继承的,通过extends关键字声明一个接口是一个接口的子接口,由于接口中的方法和常量都是public的,子接口将继承胡接口的全部方法和常量。

2、抽象类可以继承自实体类。

-------------The End-------------

本文标题:Java中接口和抽象类

文章作者:Dimple

发布时间:2018年08月01日 - 20:08

最后更新:2018年08月01日 - 21:08

原始链接:http://www.bianxiaofeng.com/2018/08/01/2018-8-1-20-35-28/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

na,给我一个棒棒糖!
0%