Java Interface关键字
Java中的
Interface是类的蓝图。它具有静态常量和抽象方法。
Java中的接口是实现
抽象 的一种机制。 Java接口中只能有抽象方法,而方法主体则不能。它用于实现抽象和Java中的继承。
换句话说,可以说接口可以具有抽象方法和变量。它不能具有方法主体。
Java接口也
表示IS-A关系。
它不能像抽象类一样实例化。
自Java 8,我们可以在接口中具有
默认和静态方法。
自Java 9开始,我们可以在接口中具有
私有方法。
为什么使用Java接口?
使用接口的主要原因主要有三个。它们在下面给出。
它用于实现抽象。
通过接口,我们可以支持多重继承的功能。
可用于实现松散耦合。
如何声明接口?
使用interface关键字声明接口。它提供了全面的抽象;表示接口中的所有方法都用空主体声明,并且默认情况下所有字段均为public,static和final。实现接口的类必须实现接口中声明的所有方法。
语法:
interface <
interface_name>
{
// declare constant fields
// declare methods that abstract
// by default.}
Java8 Interface改进
由于Java 8,接口可以具有默认方法和静态方法,下面将对此进行讨论
编译器内部加法
注意: Java编译器在接口方法之前添加了公共关键字和抽象关键字。而且,它在数据成员之前添加了public,static和final关键字。
换句话说,默认情况下,Interface字段是public,static和final,方法是public和abstract。
类与接口之间的关系
如下图所示,一个类扩展了另一个类,一个接口扩展了另一个接口,但是一个
类实现接口。
Java接口示例
在此示例中,Printable接口只有一个方法,并且提供了其实现在A6类中。
interface printable{
void print();
}
class A6implementsprintable{
publicvoidprint(){
System.out.println("Hello");
}
publicstaticvoidmain(String args[]){
A6 obj =newA6();
obj.print();
}
}
输出:
Hello
Java接口示例: Drawable
在此示例中,Drawable接口只有一个方法。它的实现由Rectangle和Circle类提供。在实际情况下,接口是由其他人定义的,但是其实现是由不同的实现提供程序提供的。而且,它被其他人使用。使用该接口的用户将实现部分隐藏。
文件: TestInterface1.java
//Interface declaration: by first userinterface Drawable{
void draw();
}
//Implementation: by second userclass RectangleimplementsDrawable{
publicvoiddraw(){
System.out.println("drawing rectangle");
}
}
class CircleimplementsDrawable{
publicvoiddraw(){
System.out.println("drawing circle");
}
}
//Using interface: by third userclass TestInterface1{
publicstaticvoidmain(String args[]){
Drawable d=new Circle();
//In real scenario, object is provided by method e.g. getDrawable()d.draw();
}
}
输出:
drawing circle
Java接口示例: 银行
让我们看一下另一个提供Bank接口实现的Java接口示例。
文件: TestInterface2.java
interface Bank{
float rateOfInterest();
}
class SBIimplementsBank{
publicfloat rateOfInterest(){
return9.15f;
}
}
class PNBimplementsBank{
publicfloat rateOfInterest(){
return9.7f;
}
}
class TestInterface2{
publicstaticvoidmain(String[] args){
Bank b=new SBI();
System.out.println("ROI: "+b.rateOfInterest());
}
}
输出:
ROI: 9.15
Java在接口中的多重继承
如果一个类实现了多个接口,或者一个接口扩展了多个接口,它被称为多重继承。
interface Printable{
void print();
}
interface Showable{
void show();
}
class A7implementsPrintable,Showable{
publicvoidprint(){
System.out.println("Hello");
}
publicvoidshow(){
System.out.println("Welcome");
}
publicstaticvoidmain(String args[]){
A7 obj =newA7();
obj.print();
obj.show();
}
}
Output:Hello
Welcome
Q)Java中的类不支持多重继承,但是接口可以实现多重继承,为什么?
正如我们在继承一章中所解释的,由于模棱两可,在class中不支持多重继承。但是,由于没有歧义,因此在接口的情况下受支持。这是因为其实现是由实现类提供的。例如:
interface Printable{
void print();
}
interface Showable{
void print();
}
class TestInterface3implementsPrintable, Showable{
publicvoidprint(){
System.out.println("Hello");
}
publicstaticvoidmain(String args[]){
TestInterface3 obj =newTestInterface3();
obj.print();
}
}
输出:
Hello
如上例所示,Printable和Showable接口具有相同的方法,但是其实现由TestTnterface1类提供,因此没有歧义。
接口继承
一个类实现了一个接口,但是一个接口扩展了另一个接口。
interface Printable{
void print();
}
interface ShowableextendsPrintable{
void show();
}
class TestInterface4implementsShowable{
publicvoidprint(){
System.out.println("Hello");
}
publicvoidshow(){
System.out.println("Welcome");
}
publicstaticvoidmain(String args[]){
TestInterface4 obj =newTestInterface4();
obj.print();
obj.show();
}
}
输出:
Hello
Welcome
接口中的Java 8默认方法
由于Java 8,我们可以在接口中使用方法主体。但是我们需要将其设为默认方法。让我们看一个例子:
文件: TestInterfaceDefault.java
interface Drawable{
void draw();
defaultvoidmsg(){
System.out.println("defaultmethod");
}
}
class RectangleimplementsDrawable{
publicvoiddraw(){
System.out.println("drawing rectangle");
}
}
class TestInterfaceDefault{
publicstaticvoidmain(String args[]){
Drawable d=new Rectangle();
d.draw();
d.msg();
}
}
输出:
drawing rectangle
default method
接口中的Java 8静态方法
由于Java 8,我们可以在接口中使用静态方法。让我们看一个例子:
文件: TestInterfaceStatic.java
interface Drawable{
void draw();
static int cube(int x){
returnx*x*x;
}
}
class RectangleimplementsDrawable{
publicvoiddraw(){
System.out.println("drawing rectangle");
}
}
class TestInterfaceStatic{
publicstaticvoidmain(String args[]){
Drawable d=new Rectangle();
d.draw();
System.out.println(Drawable.cube(3));
}
}
输出:
drawing rectangle
27
Q)什么是标记或标记接口?
没有成员的接口称为标记或标记的接口,例如可序列化,可克隆,远程等。它们用于向JVM提供一些基本信息,以便JVM可以执行一些有用的操作。操作。
//How Serializableinterfaceis written?publicinterface Serializable{
}
Java中的嵌套接口
注意: 一个接口可以具有另一个称为嵌套接口的接口。我们将在嵌套类一章中详细学习它。例如:
interface printable{
void print();
interface MessagePrintable{
void msg();
}
}