接口:
如果一个抽象类的所有方法都是抽象方法,则可以把这个类用另外一种形式来定义,即接口。
接口特点:
- 一个接口可以被多个类实现;
- 接口不能实例化,不能创建构造方法;
- 一个接口可以实现多个接口,一个接口可以继承接口;
- jdk8.0 之后,接口不仅可以修饰,全局常量,抽象方法,静态方法,默认方法;
- 接口中的静态方法,只能接口进行调用;
- 接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
抽象类:
使用 abstract 修饰的类称为抽象类。
抽象类特点:
- 抽象类中可以没有抽象方法;
- 类中可以定义抽象方法(abstract修饰的方法);
- 抽象类不能直接实例化,要通过其普通子类进行实例化,抽象类可以创建构造方法,为子类调用;
- 子类继承抽象类必须实现抽象类中所有的抽象方法,否则子类也必须定义为抽象类;
- 抽象类修饰符必须为public或者protected,不能是private,因为创建抽象类,就是要被其他类继承,用private修饰了,则不能被子类继承,子类便无法实现该方法。
接口与抽象类异同点:
- 一个类实现接口的话要实现接口的所以方法,而抽象类不一定;
- 类可以实现很多个接口,但是只能继承一个抽象类;
- 接口中声明的变量默认都是final的。抽象类可以包含非final的变量;
- 接口和抽象类都不可以被实例化;
- 接口不能创建构造方法,抽象类可以创建构造方法;
- 接口中的静态方法,只能接口进行调用,而抽象类不是;
- 实现接口的类必须实现其中的所有方法,继承自抽象类的子类实现所有的抽象方法。