接口是什么
接口是java语言提供的另一种重要的功能,它的结构与抽象类非常相似。
接口被用来建立类与类之间的协议。
Java用多实现来代替多继承
接口的定义和实现
- 接口的定义
[public] interface 接口名称 [extends 父接口(多个父接口用逗号隔开)]
{
[public][static][final] 数据类型 成员变量名 = 常量;
...
[public][abstract] 返回值的数据类型 方法名(参数);
}
- 接口的实现
class 类名称 implements 接口名1,接口名2...
{
//如果接口中的方法没有全部实现(重写),类需要定义为抽象类
}
接口中的成员变量和成员方法的特点
- 接口中成员变量的特点
所有的成员变量都是static和final的。在定义的时候不能不初始化。
import java.util.*;
public interface RandVals
{
int NUMBER = 5; //可以直接初始化
public static final int NUMBER1 = 6; //public和static可写可不写
Random RAND = new Random(47);
int RANDNUMBER = RAND.nextInt(10); //可以用随机数初始化
//int C //此句错误,定义时不能不初始化
}
//接口中的成员变量储存在接口的静态存储区域,可以直接用接口名调用
public class TestRandVals
{
public static void main(String[] args)
{
System.out.println(RandVals.NUMBER);
System.out.println(RandVals.NUMBER1);
System.out.println(RandVals.RANDNUMBER);
}
}
- 接口中的成员方法的特点
所有成员方法都是public和abstract
接口的继承和嵌套
- 接口的多继承
通过继承接口来扩展接口
在java中允许接口存在多继承而不允许类存在多继承
允许接口多继承的原因是接口中的方法没有方法体
interface A
{
void fight();
}
interface B
{
void swim();
}
interface C
{
void run();
}
interface D extends A,B,C
{//继承接口A,B,C来扩展接口D
void fly();
}
public class Main implements D
{
public void fight() {};
public void swim() {};
public void run() {};
public void fly() {};
}
使用接口多继承的注意事项
在接口的多继承中,如果继承两个具有相同方法名而返回值不同的接口时,会发生什么?
interface A
{
void fight();
}
interface B
{
int fight();
}
/*
interface C extends A,B
{
//此接口会报错。
//错误信息:The return types are incompatible for the inherited methods A.fight(), B.fight()
//个人理解:C继承A,B后,相当于C中拥有两个方法:void fight()和 int fight(),java中不允许存在具有相同方法名而返回值不同的方法
}
*/
同样的道理,在实现接口中也会出现这样的问题
interface A
{
void fight();
}
public class Main implements A
{
// int fight() {}; 此句错误:The return type is incompatible with A.fight()
}
- 接口的嵌套
接口可以嵌套在接口中
特点:嵌套的接口一定是public的
实现某个接口时,并不需要实现嵌套在其内部的任何接口
interface A
{
void a();
interface B
{
void b();
}
//private interface C {} 此句错误:The interface member type C can only be public
}
class Main implements A
{
public void a() {}
}
class Main1 implements A.B
{//嵌套接口的实现
public void b() {}
}
接口也可以嵌套在类中
特点:类中的接口可以是私有的(private)。
私有的接口只能被定义它的类实现
class A
{
public interface B
{
void b();
}
private interface B1
{//类中的接口可以是private的
void b1();
}
public class C implements B1
{//可以用public类实现private接口
public void b1() {}
}
private class C1 implements B1
{//可以用private类实现private接口
public void b1() {}
}
}
关于Java中接口的知识点,我目前只会这些。
有什么建议或者错误的地方,请评论,谢谢。