随着互联网的不断发展,越来越多的程序员都开始学习java编程语言,而进我们就一起来了解一下,java编程中抽象类与接口的区别和应用场景。
一、抽象类
抽象类体现了数据抽象的思想(不然呢),是实现多态的一种机制。抽象类定义了一组抽象的方法,至于这组抽象方法的具体表现形式由子类来继承实现。
抽象类就是用来继承的,否则它就没有存在的任何意义。
二、接口
接口是一种比抽象类更加抽象的“类”,毕竟是用关键字interface声明的,不是用class。
接口只是一种形式,就好像一纸契约,自身不能做任何事情。但只要某个类实现了这个接口,就必须按照这纸契约来办事:接口里提到的方法必须全部实现,少一个都不行(抽象类的子类可以忽视非抽象方法)。
三、接口与抽象类的区别
抽象类中的方法可以有方法体,能实现方法具体要实现的功能,但是接口中的方法不行,没有方法体。
抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是publicstaticfinal类型的,并且是隐式的,缺省的。
接口中不能含有静态代码块以及静态方法(用static修饰的方法),而抽象类是可以有静态代码块和静态方法的。
一个类只能继承一个抽象类,而一个类却可以实现多个接口。
四、应用场景分析
究竟什么时候使用接口,什么时候使用抽象类呢?
1、抽象类表示了一种“is-a”的关系,而接口表示的是“like-a”的关系。也就是说,如果B类是A(沉默王二是一个作者),则A应该用抽象类。如果B类只是和A有某种关系,则A应该用接口。
2、如果要拥有自己的成员变量和非抽象方法,则用抽象类。接口只能存在静态的不可变的成员变量(不过一般都不在接口中定义成员变量)。
3、为接口添加任何方法(抽象的),相应的所有实现了这个接口的类,也必须实现新增的方法,否则会出现编译错误。对于抽象类,如果添加了非抽象方法,其子类却可以坐享其成,完全不必担心编译会出问题。
4、抽象类和接口有很大的相似性,请谨慎判断。Java从1.8版本开始,尝试向接口中引入了默认方法和静态方法,以此来减少抽象类和接口之间的差异。换句话说,两者之间越来越难区分了。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!