接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能
接口的定义格式:
interface 接口名{
default void test(){ //默认方法需要default来修饰
System.out.println("hello ");
}
static String staticTest(){ //在接口中定义类方法,需要static来修饰
return "类方法";
}
}
实现接口的格式:
class 类名 implements 接口{
}
接口要注意的细节:
1. 接口其实是一个特殊的类。
2. 接口中的成员变量都是属于常量,默认的修饰符 public static final.
3. 接口中的方法都是抽象 的方法, 默认的修饰符: public abstract 。
4. 接口是不能用于创建对象。
5. 接口是没有构造方法的,因为接口中的变量都是常量,接口中方法都是抽象 的方法。
6. 一个非抽象类实现一个接口时,必须实现接口中的所有方法。
//A接口
interface A{
//成员变量
public static final int i =10;
void test();
}
//Demo实现了A接口...
class Demo implements A{
public static void main(String[] args)
{
//A a = new A();
Demo9 d = new Demo9();
d.test();
}
public void test(){
System.out.println("这个接口的test方法...");
}
}
接口和抽象类的异同:
相同:
1.接口和抽象类都不能被实例化,他们都位于继承树的顶端,用于被其他类实现和继承.
2.接口和继承类都可以包含抽象方法,实现接口或继承抽象类的普遍子类都必须实现这 些抽象方法.
不同:
1.接口作为系统与外界交互的窗口,接口体现的是一种规范,对于接口的是闲着而言,接口 规定了是闲着必须向外提供哪些服务(以方法的形式来提供);对于接口的调用者来言,接口规定了调用者可以调用哪些服务(就是如何调用方法);抽象类作为系统中多个子类的共同父类,它所体现的是一种模板式设计,可以被当做系统中实现过程中的中间产品,这个中间产品已经实现了系统的部分功能(那些已经提供实现的方法),但这个产品依然不能成为最终的产品,必须更进一步的完善.
2.接口里只能包含抽象方法和默认方法,不能为普通方法提供实现方法,抽象类则完全可以包含普通方法.
3.接口里不能定义静态方法,抽象类可以定义静态方法.
4.接口里只能定义静态常量,不能定义普通成员变量;抽象类既可以定义普通成员变量,也可以定义静态成员变量.
5.抽象类里包含构造器,抽象类里的构造器并不是用于创建对象,而是让子类调用这些构造器来完成属于抽象类的初始化操作.
6.接口里不能包含初始化块,但抽象类则完全可以包含初始化块.