在面向对象编程中, 抽象是其的一大特征之一. 在java中,通过抽象类和接口来体现OOP的抽象, 要提高程序的复用率, 增加程序的维护性和扩展性, 就必须是面向抽象的编程, 面向接口的编程. 正确的使用接口和抽象类就变得非常重要. 这两者有很多相似的地方,也有很多的不同. 让我们一起了解一下吧~
本文将先介绍抽象类和接口, 再谈及其区别
如果有错误欢迎指正.
抽象类 :
首先来了解一下抽象方法, 它是一种特殊的方法, 只有声明没有具体实现. 抽象方法的声明格式为:
abstract void fun();
抽象方法必须用abstract关键字进行修饰, 如果一个类含有抽象方法, 那么就称这个类为抽象类, 抽象类必须再类前用abstract关键字修饰. 因为抽象类中含有无具体实现的方法, 所以不能用抽象类创建对象.
abstract class Test{
abstract void fun();
}
抽象类就是为了继承而存在的, 如果你创建了一个抽象类却不去继承它, 那么就是白白创建了这个抽象类
包含抽象方法的类就是抽象类, 但不是抽象类中只能有抽象方法, 也可以有成员变量和普通的成员方法.
抽象类和普通类的区别:
- 抽象方法必须为public或是protected, 如果是private就无法被子类继承, 缺省状态下就默认为public
- 抽象类不能用来创建对象
- 如果一个类继承与一个抽象类, 那么它的子类必须要实现父类的抽象方法, 如果子类没有继承父类的抽象方法, 那么子类必须定义为abstract类
接口 :
接口是指被别人调用的方法或者函数, 形式如下:
interface InterfaceName{
}
接口中可以含有变量和方法. 但是接口的变量会被隐式的指定为public static final变量, 并且只能是public static final变量. (一般不在接口中定义变量) 而方法会被隐式的指定为public abstract方法, 并且只能是public abstract方法, 并且接口中所有的方法不能有具体的实现, 就是说, 接口中所有的方法都必须是抽象方法.
实现接口的关键字是implements
抽象类和接口的区别 :
- 一个类可以继承一个抽象类, 但是可以实现多个接口
- 抽象类中的成员变量可以有很多类型,而接口只能是public static final
- 抽象类可以定义普通属性和静态常量属性, 而接口只能定义静态常量属性public static final
- 抽象类可以提供成员方法的实现细节, 而接口只能存在public abstract方法