
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
java编程开发程序员是目前市面上就业范围非常广泛的一个岗位,今天我们就通过案例分析来简单了解一下,java编程抽象类和接口的区别。
在面向对象编程当中,抽象类和接口是为抽象而生而的两个概念,在初学时特别容易搞混它们俩。
Java既支持接口,也支持抽象类,这里主要拿Java的接口和抽象类做比较。简单地在Java中定义这两个概念就是,抽象类是包含抽象方法的类,接口是对行为的抽象。
抽象类
从定义上看,Java中的抽象类就是用来继承的,没有被继承的抽象类没有任何实际的作用。而且,抽象类中的抽象方法只是起到一个限制的作用,并没有提供实际的方法体,这也要求子类去实现自己的方法体。
将抽象类的特征总结一下,大概有以下几点:
抽象类不允许被实例化,只能被继承
抽象类可以包含属性和方法,方法里既可以包含具体实现,也可以不包含具体实现,不包含具体实现的方法称为抽象方法
子类继承抽象类,必须实现抽象类的所有抽象方法
接口
接口实际上也可以包含变量和方法,但是,接口中的变量会被隐式地指定为publicstaticfinal修饰的不可变量,接口中的方法会被隐式地指定为publicabstract修饰的方法。
将接口的特性总结一下,大概有以下几点:
接口不能声明属性,可以声明的是静态变量
接口声明的方法不包含具体实现
类实现接口的时候,必须实现接口中声明的所有方法
区别
从上述对抽象类和接口的简单分析看,抽象类和接口的概念非常相似,从明面上看,其大的区别就是,抽象类是用来继承的,接口是用来实现的。
从更深层次的角度上看,抽象类是不能被实例化的类,只能被子类继承,继承关系表示的是一种is-A的关系,接口表示的是一种has-A关系。
在使用时,抽象类可以定义一些公共的属性、方法,抽象方法用于声明子类继承的约束;接口的主要作用就是声明实现的协议,但是相比抽象类的优势就是一个类可以实现多个接口。
抽象类和接口的使用
抽象类的使用
先,只能被子类继承的抽象类能解决代码复用的问题。
然后,抽象类表达的是一种抽象概念,适用于表示现实生活中的抽象概念。如狗是具体对象,动物则是抽象概念。
使用抽象方法,而非空的方法体,创建子类时就知道他必须要重写该方法,而不能忽略。
使用抽象类,类的使用者创建对象的时候,就知道他必须要使用某个具体子类,而不是抽象类本身。
使用抽象类提高了安全性,降低了开发者犯错的概率,是一种更优雅的编码方式。
抽象类更多的作用是引导使用者正确使用,避免被误用。
接口的使用
接口是对行为的一种抽象,相当于一组协议,更侧重于解耦。
调用者只需要关注抽象的接口,不需要了解具体的实现,具体的实现代码对调用者透明。接口实现了约定和实现相分离,可以降低代码间的耦合,提高代码的扩展性。
配合使用
如果抽象类只定义抽象方法,那抽象类和接口非常相似。但接口和抽象类在根本上是不同的,一个类可以实现多个接口,但只能继承一个类。
抽象类和接口是配合而不是替代,它们经常一起使用,接口声明能力,抽象类提供默认实现,实现全部或部分方法,一个接口经常有一个对应的抽象类。
比如,在Java类库中有以下关系:
Collection接口和对应的AbstractCollection抽象类
List接口和对应的AbstractList抽象类
Map接口和对应的AbstractMap抽象类
模拟抽象类和接口
通过抽象类实现接口
接口没有成员变量,没有方法实现,只有方法声明,实现接口的类必须实现接口中的所有方法。
只要满足上述几个特点,从设计的角度上讲,它就可以叫作接口。
在Java中,使用抽象类实现起来也比较简单,即抽象类只定义抽象方法即可,缺陷就是子类无法继承多个抽象类。
用普通类模拟接口
普通的类是可以包含具体实现的,这不符合接口的定义。但是,可以让类中的方法抛出NoSuchMethodError错误来模拟不包含实现的接口,并且强迫子类在继承这个父类时都去主动实现父类的方法,否则就会在运行时抛出异常。
为了避免普通的类被实例化,需要将这个类的构造函数声明成protected访问权限。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。