Java Interface关键字



Java Interface关键字

Java中的
Interface是类的蓝图。它具有静态常量和抽象方法。
Java中的接口是实现
抽象 的一种机制。 Java接口中只能有抽象方法,而方法主体则不能。它用于实现抽象和Java中的继承。
换句话说,可以说接口可以具有抽象方法和变量。它不能具有方法主体。
Java接口也
表示IS-A关系
它不能像抽象类一样实例化。
自Java 8,我们可以在接口中具有
默认和静态方法
自Java 9开始,我们可以在接口中具有
私有方法

为什么使用Java接口?

使用接口的主要原因主要有三个。它们在下面给出。

它用于实现抽象。
通过接口,我们可以支持多重继承的功能。
可用于实现松散耦合。
Java Interface关键字_https://bianchenghao6.com_【Java 基础教程】_第1张

如何声明接口?

使用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 Interface关键字_https://bianchenghao6.com_【Java 基础教程】_第2张


类与接口之间的关系

如下图所示,一个类扩展了另一个类,一个接口扩展了另一个接口,但是一个
类实现接口

Java Interface关键字_https://bianchenghao6.com_【Java 基础教程】_第3张


Java接口示例

在此示例中,Printable接口只有一个方法,并且提供了其实现在A6类中。
 interface printable{
    void print();
}
class A6 implements printable{
    public void print(){
        System.out.println("Hello");
    }
    public static void main(String args[]){
        A6 obj = new A6();
        obj.print();
    }
}

输出:
Hello

Java接口示例: Drawable

在此示例中,Drawable接口只有一个方法。它的实现由Rectangle和Circle类提供。在实际情况下,接口是由其他人定义的,但是其实现是由不同的实现提供程序提供的。而且,它被其他人使用。使用该接口的用户将实现部分隐藏。
文件: TestInterface1.java
 //Interface declaration: by first userinterface Drawable{
    void draw();
}
//Implementation: by second userclass Rectangle implements Drawable{
    public void draw(){
        System.out.println("drawing rectangle");
    }
}
class Circle implements Drawable{
    public void draw(){
        System.out.println("drawing circle");
    }
}
//Using interface: by third userclass TestInterface1{
    public static void main(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 SBI implements Bank{
    public float rateOfInterest(){
        return 9.15f;
    }
}
class PNB implements Bank{
    public float rateOfInterest(){
        return 9.7f;
    }
}
class TestInterface2{
    public static void main(String[] args){
        Bank b=new SBI();
        System.out.println("ROI: "+b.rateOfInterest());
    }
}

输出:
ROI: 9.15


Java在接口中的多重继承

如果一个类实现了多个接口,或者一个接口扩展了多个接口,它被称为多重继承。

Java Interface关键字_https://bianchenghao6.com_【Java 基础教程】_第4张

 interface Printable{
    void print();
}
interface Showable{
    void show();
}
class A7 implements Printable,Showable{
    public void print(){
        System.out.println("Hello");
    }
    public void show(){
        System.out.println("Welcome");
    }
    public static void main(String args[]){
        A7 obj = new A7();
        obj.print();
        obj.show();
    }
}

Output:Hello 

Welcome

Q)Java中的类不支持多重继承,但是接口可以实现多重继承,为什么?

正如我们在继承一章中所解释的,由于模棱两可,在class中不支持多重继承。但是,由于没有歧义,因此在接口的情况下受支持。这是因为其实现是由实现类提供的。例如:
 interface Printable{
    void print();
}
interface Showable{
    void print();
}
class TestInterface3 implements Printable, Showable{
    public void print(){
        System.out.println("Hello");
    }
    public static void main(String args[]){
        TestInterface3 obj = new TestInterface3();
        obj.print();
    }
}

输出:
Hello

如上例所示,Printable和Showable接口具有相同的方法,但是其实现由TestTnterface1类提供,因此没有歧义。

接口继承

一个类实现了一个接口,但是一个接口扩展了另一个接口。
 interface Printable{
    void print();
}
interface Showable extends Printable{
    void show();
}
class TestInterface4 implements Showable{
    public void print(){
        System.out.println("Hello");
    }
    public void show(){
        System.out.println("Welcome");
    }
    public static void main(String args[]){
        TestInterface4 obj = new TestInterface4();
        obj.print();
        obj.show();
    }
}

输出:
Hello 

Welcome

接口中的Java 8默认方法

由于Java 8,我们可以在接口中使用方法主体。但是我们需要将其设为默认方法。让我们看一个例子:
文件: TestInterfaceDefault.java
 interface Drawable{
    void draw();
    default void msg(){
        System.out.println("default method");
    }
}
class Rectangle implements Drawable{
    public void draw(){
        System.out.println("drawing rectangle");
    }
}
class TestInterfaceDefault{
    public static void main(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){
        return x*x*x;
    }
}
class Rectangle implements Drawable{
    public void draw(){
        System.out.println("drawing rectangle");
    }
}
class TestInterfaceStatic{
    public static void main(String args[]){
        Drawable d=new Rectangle();
        d.draw();
        System.out.println(Drawable.cube(3));
    }
}

输出:
drawing rectangle 

27

Q)什么是标记或标记接口?

没有成员的接口称为标记或标记的接口,例如可序列化,可克隆,远程等。它们用于向JVM提供一些基本信息,以便JVM可以执行一些有用的操作。操作。
 //How Serializable interface is written?public interface Serializable{
}


Java中的嵌套接口

注意: 一个接口可以具有另一个称为嵌套接口的接口。我们将在嵌套类一章中详细学习它。例如:
 interface printable{
    void print();
    interface MessagePrintable{
        void msg();
    }
}