乐趣区

关于后端:Java-接口

接口(英文:Interface),在 JAVA 编程语言中是一个形象类型,是形象办法的汇合,接口通常以 interface 来申明。一个类通过继承接口的形式,从而来继承接口的形象办法。

接口并不是类,编写接口的形式和类很类似,然而它们属于不同的概念。类形容对象的属性和办法。接口则蕴含类要实现的办法。

除非实现接口的类是抽象类,否则该类要定义接口中的所有办法。

接口无奈被实例化,然而能够被实现。一个实现接口的类,必须实现接口内所形容的所有办法,否则就必须申明为抽象类。另外,在 Java 中,接口类型可用来申明一个变量,他们能够成为一个空指针,或是被绑定在一个以此接口实现的对象。

接口与类类似点:

  1. 一个接口能够有多个办法。
  2. 接口文件保留在 .java 结尾的文件中,文件名应用接口名。
  3. 接口的字节码文件保留在 .class 结尾的文件中。
  4. 接口相应的字节码文件必须在与包名称相匹配的目录构造中。
  5. 接口与类的区别:
  6. 接口不能用于实例化对象。
  7. 接口没有构造方法。
  8. 接口中所有的办法必须是形象办法,Java 8 之后 接口中能够应用 default 关键字润饰的非形象办法。
  9. 接口不能蕴含成员变量,除了 static 和 final 变量。
  10. 接口不是被类继承了,而是要被类实现。
  11. 接口反对多继承。

    接口个性

    接口中每一个办法也是隐式形象的, 接口中的办法会被隐式的指定为 public abstract(只能是 public abstract,其余修饰符都会报错)。
    接口中能够含有变量,然而接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 润饰会报编译谬误)。
    接口中的办法是不能在接口中实现的,只能由实现接口的类来实现接口中的办法。
    抽象类和接口的区别
    抽象类中的办法能够有办法体,就是能实现办法的具体性能,然而接口中的办法不行。
    抽象类中的成员变量能够是各种类型的,而接口中的成员变量只能是 public static final 类型的。
    接口中不能含有动态代码块以及静态方法 (用 static 润饰的办法),而抽象类是能够有动态代码块和静态方法。
    一个类只能继承一个抽象类,而一个类却能够实现多个接口。
    注:JDK 1.8 当前,接口里能够有静态方法和办法体了。

注:JDK 1.8 当前,接口容许蕴含具体实现的办法,该办法称为 ” 默认办法 ”,默认办法应用 default 关键字润饰。更多内容可参考 Java 8 默认办法。

注:JDK 1.9 当前,容许将办法定义为 private,使得某些复用的代码不会把办法裸露进来。更多内容可参考 Java 9 公有接口办法。

接口的申明
接口的申明语法格局如下:

[可见度] interface 接口名称 [extends 其余的接口名] {
        // 申明变量
        // 形象办法
}

Interface 关键字用来申明一个接口。上面是接口申明的一个简略例子。

NameOfInterface.java 文件代码:/* 文件名 : NameOfInterface.java */
import java.lang.*;
// 引入包
 
public interface NameOfInterface
{
   // 任何类型 final, static 字段
   // 形象办法
}

接口有以下个性:
接口是隐式形象的,当申明一个接口的时候,不用应用 abstract 关键字。
接口中每一个办法也是隐式形象的,申明时同样不须要 abstract 关键字。
接口中的办法都是私有的。
实例

Animal.java 文件代码:/* 文件名 : Animal.java */
interface Animal {public void eat();
   public void travel();}

接口的实现
当类实现接口的时候,类要实现接口中所有的办法。否则,类必须申明为形象的类。

类应用 implements 关键字实现接口。在类申明中,Implements 关键字放在 class 申明前面。

实现一个接口的语法,能够应用这个公式:

接口语法:
…implements 接口名称 [, 其余接口名称, 其余接口名称 …, …] …
实例

MammalInt.java 文件代码:/* 文件名 : MammalInt.java */
public class MammalInt implements Animal{public void eat(){System.out.println("Mammal eats");
   }
 
   public void travel(){System.out.println("Mammal travels");
   } 
 
   public int noOfLegs(){return 0;}
 
   public static void main(String args[]){MammalInt m = new MammalInt();
      m.eat();
      m.travel();}
}
以上实例编译运行后果如下:

Mammal eats
Mammal travels
重写接口中申明的办法时,须要留神以下规定:类在实现接口的办法时,不能抛出强制性异样,只能在接口中,或者继承接口的抽象类中抛出该强制性异样。类在重写办法时要保持一致的办法名,并且应该放弃雷同或者相兼容的返回值类型。如果实现接口的类是抽象类,那么就没必要实现该接口的办法。在实现接口的时候,也要留神一些规定:一个类能够同时实现多个接口。一个类只能继承一个类,然而能实现多个接口。一个接口能继承另一个接口,这和类之间的继承比拟类似。接口的继承
一个接口能继承另一个接口,和类之间的继承形式比拟类似。接口的继承应用 extends 关键字,子接口继承父接口的办法。上面的 Sports 接口被 Hockey 和 Football 接口继承:// 文件名: Sports.java
public interface Sports
{public void setHomeTeam(String name);
   public void setVisitingTeam(String name);
}
 
// 文件名: Football.java
public interface Football extends Sports
{public void homeTeamScored(int points);
   public void visitingTeamScored(int points);
   public void endOfQuarter(int quarter);
}
 
// 文件名: Hockey.java
public interface Hockey extends Sports
{public void homeGoalScored();
   public void visitingGoalScored();
   public void endOfPeriod(int period);
   public void overtimePeriod(int ot);
}

Hockey 接口本人申明了四个办法,从 Sports 接口继承了两个办法,这样,实现 Hockey 接口的类须要实现六个办法。

类似的,实现 Football 接口的类须要实现五个办法,其中两个来自于 Sports 接口。

退出移动版