Java基础 专题
专题目录
您的位置:java > Java基础专题 > Java接口
Java接口
作者:--    发布时间:2019-11-20

java中的接口是类的蓝图。 它有静态常量和抽象方法。java中的接口是一种实现抽象的机制。 接口中只有抽象方法而不是方法体。接口用于在java中实现抽象和多重继承。

java接口也表示is-a关系。它不能像抽象类一样被实例化。

为什么要使用java接口?

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

  • 它用于实现抽象。
  • 通过接口,可以支持多重继承的功能。
  • 它可用于实现松耦合。

java 8接口的改进

由于java 8,接口可以有默认和静态方法,稍后讨论。

由编译器内部添加
java编译器在接口方法之前添加publicabstract关键字。还有,它在数据成员之前添加publicstaticfinal关键字。

换句话说,接口字段默认是publicstaticfinal,方法默认是publicabstract

了解类和接口之间的关系

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

java接口示例

在这个例子中,printable接口只有一个方法,它的实现是在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();
    }
}

上面代码执行结果如下 -

hello, interface

java接口示例:drawable

在这个例子中,drawable接口只有一个方法。 它的实现由rectanglecircle类提供。 在实际情况下,接口由一些开发者定义,但实现由不同的实现提供者提供。 并且它被别人使用。实现部分被使用接口的用户隐藏。

创建一个 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();
    }
}

执行上面代码得到以下结果 -

drawing circle

java接口示例:bank

让我们来看看另一个提供了bank接口实现的java接口的例子。创建一个 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多继承接口

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

参考以下示例代码的实现 -

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

执行上面代码得到以下结果 -

hello
welcome

问题:在java中不支持通过类实现多继承,但可通过接口实现,为什么?

正如在继承章节中所解释的,在类中不支持多重继承是因为模糊。 但是在接口的情况下可以支持,因为接口没有歧义,接口的具体实现由实现类提供。 例如:

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

上面代码执行得到以下结果 -

hello

从上面的例子可以看到,printableshowable接口有相同的方法,但它的实现是由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开始,我们可以在接口中有方法体。 但需要使其为默认方法。现在来看看一个例子,创建一个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();
    }
}

执行上面代码,得到如下结果 -

drawing rectangle
default method

java 8接口中的静态方法

从java 8开始,我们可以在接口中有静态方法。 让我们来看看下面的一个例子,创建一个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));
    }
}

执行上面代码,得到如下结果 -

drawing rectangle
27

问题:什么是标记或标记的接口?

没有成员的接口(仅定义一个空的接口)称为标记或标记接口。 例如:可序列化,可克隆,远程等。它们用于向jvm提供一些基本信息,以便jvm可以执行一些有用的操作。

//how serializable interface is written?  
public interface serializable{  
}

java嵌套接口

注意: 一个接口中可以有另一个接口,即被称为嵌套接口。有关于这方面的知识,将在嵌套类的章节中详细学习。 例如:

interface printable {
    void print();

    interface messageprintable {
        void msg();
    }
}

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册