java关键字interfaceof_Java Interface关键字

Java Interface关键字

Java中的

Interface是类的蓝图。它具有静态常量和抽象方法。

Java中的接口是实现

抽象 的一种机制。 Java接口中只能有抽象方法,而方法主体则不能。它用于实现抽象和Java中的继承。

换句话说,可以说接口可以具有抽象方法和变量。它不能具有方法主体。

Java接口也

表示IS-A关系。

它不能像抽象类一样实例化。

自Java 8,我们可以在接口中具有

默认和静态方法。

自Java 9开始,我们可以在接口中具有

私有方法。

为什么使用Java接口?

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

它用于实现抽象。

通过接口,我们可以支持多重继承的功能。

可用于实现松散耦合。

bc609549bcf26ba041ae026d07c39bb3.png

如何声明接口?

使用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。

fc56b7adaceabda133447d589d093f47.png

类与接口之间的关系

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

类实现接口。

16700f420591786d9c83d3ed71767fb0.png

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在接口中的多重继承

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

1343239e0a21fab0740521e5727b96aa.png

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

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值