1.接口的基本概念
- 抽象方法和常量值得集合。从本质上讲,接口是一种特殊的抽象类。
- 格式:
[public] interface 接口名 [extends superinterfaceList]
{
//定义常量和方法
}
2.接口的知识点
接口中的属性成员必须是public static final 类型的,方法成员必须是public abstract类型的(抽象方法)。定义时可以部分省略或全部省略,默认为上述的类型。
一个类不能继承接口,只能实现接口(使用implements关键字)。类继承类,接口继承接口。
接口允许多继承。
接口中定义的属性成员的值不能在实现类中更改。(属性成员为final类型不允许更改)
如果实现类只实现了接口的部分方法,则该类必须声明为abstract类型。
interface A
{
public static final int i = 1;
public abstract void f();
int j = 2; //默认为public static final类型
void g(); //默认为public abstract类型
}
abstract class B implements A //如果不重写接口的所有抽象方法必须声明为abstract类型
{
}
- 一个类可以继承一个父类的同时实现多个接口,但extends须放在implements前面。
interface A
{
}
interface B
{
}
class C
{
}
class D extends C implements A, B
{
}
- 接口不能实例化,但能定义一个接口引用类型的变量,并将其指向实现接口的对象,达到多态的目的。
interface A
{
void f();
}
class B implements A
{
public void f() //必须加public,f()是public类型,重写类型必须相同
{
System.out.println("嘿嘿");
}
void g()
{
System.out.println("哈哈");
}
}
class Test
{
public static void main(String[] args)
{
A a1;
//A a2 = new A(); //error 接口不能实例化
a1 = new B();
a1.f();
//a1.g(); //error 不能调用子类独有的方法
}
}
3.接口的作用
- 通过接口可以实现不相关类的相同行为。
如:java规定所有可以完成自我复制功能的类都必须实现java.lang.Colneable接口,但该接口是空的,该接口没有内容,只是起个标志作用。 - 接口提供了不同对象进行协作的平台。
如:事件处理。 - 接口可以实现多继承,在一定程度上弥补了类只能单继承的缺陷。
- 接口是我们了解一个类功能的重要途径。
如:java整个容器框架就是以接口的方式建立起来的,实现不同接口的类完成的是不同的功能,接口是我们了解一个类的功能重要途径。
4.接口与抽象类的区别
- 接口中的方法一定是抽象方法,抽象类中的方法可以不是抽象方法。
- 类不允许多继承,接口允许多继承。