鍍金池/ 教程/ Java/ Java接口
Java for循環(huán)
Java接口
Java是什么?
Java命名約定
java中方法重載和方法重寫的區(qū)別
Java運算符
Java抽象類
Java快速入門
Java實例初始化程序塊
Java靜態(tài)綁定和動態(tài)綁定
Java do-while循環(huán)
Java對象克隆
Java Object類
Java聚合
Java繼承
Java this關(guān)鍵字
Java虛擬機內(nèi)部體系結(jié)構(gòu)
Java構(gòu)造器(構(gòu)造方法)
Eclipse安裝和配置
Java多態(tài)
Java方法重載
Java while循環(huán)
Java教程
Java按值調(diào)用和引用調(diào)用
Java strictfp關(guān)鍵字
Java封裝
Java語言特點
Java數(shù)組
Java instanceof運算符
Java包裝類
Java命令行參數(shù)
Java包
Java面向?qū)ο螅∣OP)概念
簡單Java程序
Java基礎實例程序
Java對象和類
Java continue語句
Java抽象類和接口的區(qū)別
C++ VS Java比較
Java if/else語句
Java switch語句
Java歷史
Java變量和數(shù)據(jù)類型
安裝Java環(huán)境(Linux)
Java JDK安裝和配置
Hello Java程序的內(nèi)部細節(jié)
Java break語句
Java方法重寫
Java Unicode編碼系統(tǒng)
怎么樣開始學習Java編程?
對象和類之間的區(qū)別
Java訪問修飾符
Java super關(guān)鍵字
Java注釋
JDK,JRE和JVM之間的區(qū)別
Java final關(guān)鍵字
Java static關(guān)鍵字

Java接口

java中的接口是類的藍圖。 它有靜態(tài)常量和抽象方法。java中的接口是一種實現(xiàn)抽象的機制。 接口中只有抽象方法而不是方法體。接口用于在Java中實現(xiàn)抽象和多重繼承。

Java接口也表示IS-A關(guān)系。它不能像抽象類一樣被實例化。

為什么要使用Java接口?

需要使用接口主要有三個原因。如下面給出。

  • 它用于實現(xiàn)抽象。
  • 通過接口,可以支持多重繼承的功能。
  • 它可用于實現(xiàn)松耦合。

Java 8接口的改進

由于Java 8,接口可以有默認和靜態(tài)方法,稍后討論。

由編譯器內(nèi)部添加
java編譯器在接口方法之前添加publicabstract關(guān)鍵字。還有,它在數(shù)據(jù)成員之前添加public,staticfinal關(guān)鍵字。

換句話說,接口字段默認是publicstaticfinal,方法默認是publicabstract。

了解類和接口之間的關(guān)系

如下圖所示,一個類擴展了另一個類,一個接口擴展了另一個接口,一個類實現(xiàn)了一個接口。

Java接口示例

在這個例子中,Printable接口只有一個方法,它的實現(xiàn)是在A類中提供的。

interface printable {
    void print();
}

class A6 implements printable {
    public void print() {
        System.out.println("Hello, Interface");
    }

    public static void main(String args[]) {
        A6 obj = new A6();
        obj.print();
    }
}

上面代碼執(zhí)行結(jié)果如下 -

Hello, Interface

Java接口示例:Drawable

在這個例子中,Drawable接口只有一個方法。 它的實現(xiàn)由RectangleCircle類提供。 在實際情況下,接口由一些開發(fā)者定義,但實現(xiàn)由不同的實現(xiàn)提供者提供。 并且它被別人使用。實現(xiàn)部分被使用接口的用戶隱藏。

創(chuàng)建一個 Java 文件:TestInterface1.java,其代碼如下 -

//Interface declaration: by first user  
interface Drawable {
    void draw();
}

// Implementation: by second user
class 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 user
class TestInterface1 {
    public static void main(String args[]) {
        Drawable d = new Circle();// In real scenario, object is provided by
                                    // method e.g. getDrawable()
        d.draw();
    }
}

執(zhí)行上面代碼得到以下結(jié)果 -

drawing circle

Java接口示例:Bank

讓我們來看看另一個提供了Bank接口實現(xiàn)的java接口的例子。創(chuàng)建一個 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());
    }
}

執(zhí)行上面代碼得到以下結(jié)果 -

ROI: 9.15

Java多繼承接口

如果一個類實現(xiàn)了多個接口,或者一個接口擴展了多個接口,即被稱為多重繼承。

參考以下示例代碼的實現(xiàn) -

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();
    }
}

執(zhí)行上面代碼得到以下結(jié)果 -

Hello
Welcome

問題:在java中不支持通過類實現(xiàn)多繼承,但可通過接口實現(xiàn),為什么?

正如在繼承章節(jié)中所解釋的,在類中不支持多重繼承是因為模糊。 但是在接口的情況下可以支持,因為接口沒有歧義,接口的具體實現(xiàn)由實現(xiàn)類提供。 例如:

interface Printable {
    void print();
}

interface Showable {
    void print();
}

class TestTnterface3 implements Printable, Showable {
    public void print() {
        System.out.println("Hello");
    }

    public static void main(String args[]) {
        TestTnterface1 obj = new TestTnterface1();
        obj.print();
    }
}

上面代碼執(zhí)行得到以下結(jié)果 -

Hello

從上面的例子可以看到,PrintableShowable接口有相同的方法,但它的實現(xiàn)是由TestTnterface1類提供的,所以沒有歧義。

接口繼承

類可以實現(xiàn)多個接口,但接口也擴展另一個接口。

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();
    }
}

執(zhí)行上面代碼,得到如下結(jié)果 -

Hello
Welcome

Java 8接口中的默認方法

從Java 8開始,我們可以在接口中有方法體。 但需要使其為默認方法。現(xiàn)在來看看一個例子,創(chuàng)建一個Java文件: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();
    }
}

執(zhí)行上面代碼,得到如下結(jié)果 -

drawing rectangle
default method

Java 8接口中的靜態(tài)方法

從Java 8開始,我們可以在接口中有靜態(tài)方法。 讓我們來看看下面的一個例子,創(chuàng)建一個Java文件: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));
    }
}

執(zhí)行上面代碼,得到如下結(jié)果 -

drawing rectangle
27

問題:什么是標記或標記的接口?

沒有成員的接口(僅定義一個空的接口)稱為標記或標記接口。 例如:可序列化,可克隆,遠程等。它們用于向JVM提供一些基本信息,以便JVM可以執(zhí)行一些有用的操作。

//How Serializable interface is written?  
public interface Serializable{  
}

Java嵌套接口

注意: 一個接口中可以有另一個接口,即被稱為嵌套接口。有關(guān)于這方面的知識,將在嵌套類的章節(jié)中詳細學習。 例如:

interface printable {
    void print();

    interface MessagePrintable {
        void msg();
    }
}

上一篇:Java Object類下一篇:C++ VS Java比較