接口的简单概述:
首先接口是功能的集合,并且只描述应该具备的方法,并没有具体的实现,具体的实现由接口的实现类(接口的子类)来完成,
这样将功能的定义和实现分离,优化了程序设计。
接口的定义:
与定义类的class不同,接口定义时需要使用interface关键字。虽然声明时使用的为interface关键字的编译后仍然会产生.class文件。
这点可以让我们将接口看做是一种只包含了功能声明的特殊类。
定义格式:
public interface 接口名 {
抽象方法1;
抽象方法2;
抽象方法3;
}
使用interface代替了原来的class,其他步骤与定义类相同:
注意:(1) 接口中的方法均为公共访问的抽象方法 (2)接口中无法定义普通的成员变量
类实现接口:
类与接口的关系为实现关系,即类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements。
格式:
class 类 implements 接口 {
重写接口中方法
}
接口中成员的特点:(1)接口中可以定义变量,但必须用public static final修饰,所以接口中的变量也称为常量。
(2)接口中可以定义方法,默认使用public abstract修饰。
(3)接口不能创建对象,因为接口没有构造方法
(4)子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化,否则子类是一个抽象类。
接口和抽象类比较:
相同点:
(1)都位于继承的顶端,用于被其他类实现或继承;
(2)都不能直接实例化对象;
(3)都包含抽象方法,其子类都必须覆写这些抽象方法;
不同点:
(1) 抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
(2)一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
(3)抽象类为继承体系中的共性内容,接口为继承体系中的扩展功能
(4)接口不能有构造方法,抽象类可以有(但是抽象类创建对象调方法没意义)(5)接口不能有方法体,抽象类可以有(抽象类中可以有非抽象的方法)
(6)接口中不能有静态的方法(因为有静态的方法是不能重写的),抽象类中可以有。
(7)接口中的凡是变量必须用public static final修饰,而抽象类中没有要求。