接口和抽象类有好多相同点和类似点,很多人有过这样的疑问:为什么有的地方必须使用接口而不是抽象类,而在另一些地方,又必须使用抽象类而不是接口呢?或者说,在考虑Java类的一般化问题时,很多人会在接口和抽象类之间犹豫不决,甚至随便选择一种。
理解抽象类
abstract class和interface在Java语言中都是用来进行抽象类(本文 中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法, 请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?
抽象类:
抽象类是一种特殊的基类,里面除包含一些基本的属性和方法之外,还能包含一些只声明但没有实现的方法,用abstract去声明
例如:
接口:接口是一种更加抽象的类型,里面声明的方法全部公开给实现者去实现,并不关心具体细节 关键字是interface
例如:
综上所看 可以看出抽象类和接口的主要区别有:
1.抽象类可以有自己的方法,但接口的方法只有声明
2.抽象类的抽象方法使用abstract声明
其它需要注意的有:
1.一个类只能继承一个实现类,但是可以实现多个接口
2.当一个抽象类和一个接口有公共的属性时,如果一个类同时实现这个抽象类和接口 则编译不会通过。
接口:
一种高度抽象的“抽象类”,使用interface关键字声明
下面定义一个Usb接口:
public interface Usb {
public void start();
public void end();
}
接口中没有构造方法
接口和抽象类一样,不能用于实例化
接口中不能定义变量,方法不准有方法体,方法默认为public,接口中方法和抽象方法不准有private修饰
只能继承接口,支持多继承(接口之间用逗号隔开)
类实现接口,使用关键字implements:
1.必须实现这个接口的所有方法,除非实现类是抽象类
2.一个类可以实现多个接口