JAVA中的接口与抽象类
1.抽象类
有abstract修饰的类称为“抽象类”,它只定义了什么方法应该存在,不能创建对象,必须派生出一个子类,并在子类中实现其未实现的方法之后,才能使用new关键字创建对象。
在方法前加上abstract就形成抽象方法,只有方法声明,没有实现代码
一个抽象类中可以包含非抽象方法和成员变量。
2.接口
定义一个接口,采用关键字interface,实现一个接口,采用关键字implements
接口的成员函数自动成为public的,数据成员自动成为static和final的。
如果接口不声明为public的,则自动变为package。
一个类可以同时实现多个接口。
可以通过继承接口来扩充已有接口,并形成一个新的接口。
实现子接口的类,必须实现“父”“子”接口所定义的所有方法,才能被实例化(即new出一个对象)。
注意:定义在接口中的常量必须被初始化。
3.区别:
抽象类是一个不完全的类,而接口只是表明类应该具有哪些“外部”特征,不涉及任何实现细节。
接口基本上不具备继承的任何具体特点,它仅仅承诺了外界能够调用的方法。
一个类一次可以实现若干个接口,但一个类只能继承一个父类。
4.什么情况下用抽象类,什么情况下使用接口?
如果一个抽象类有多个具体类,每个具体类都使用了同样的方法,那么可以考虑使用抽象类,在抽象里实现,由子类“共享”和“复用”
接口是用来实现的,而抽象类主要是用来使用父类的实现方法,否则就用接口