java的wiki_Java - Interfaces

Java - Interfaces

接口是Java中的引用类型。 它类似于类。 它是抽象方法的集合。 类实现接口,从而继承接口的抽象方法。

除了抽象方法,接口还可以包含常量,默认方法,静态方法和嵌套类型。 方法体仅适用于默认方法和静态方法。

编写接口类似于编写类。 但是一个类描述了对象的属性和行为。 接口包含类实现的行为。

除非实现接口的类是抽象的,否则需要在类中定义接口的所有方法。

接口在以下方面类似于类 -接口可以包含任意数量的方法。

接口编写在扩展名为.java的文件中,接口名称与文件名匹配。

接口的字节代码显示在.class文件中。

接口出现在包中,其对应的字节码文件必须位于与包名匹配的目录结构中。

但是,界面在几个方面与一个类不同,包括 -您无法实例化接口。

接口不包含任何构造函数。

接口中的所有方法都是抽象的。

接口不能包含实例字段。 可以在界面中出现的唯一字段必须声明为static和final。

接口不是由类扩展的; 它是由一个类实现的。

接口可以扩展多个接口。

声明接口

interface关键字用于声明接口。 这是一个声明接口的简单示例 -

例子 (Example)

以下是界面的示例 -/* File name : NameOfInterface.java */

import java.lang.*;

// Any number of import statements

public interface NameOfInterface {

// Any number of final, static fields

// Any number of abstract method declarations\

}

接口具有以下属性 -接口是隐式抽象的。 声明接口时不需要使用abstract关键字。

接口中的每个方法也是隐式抽象的,因此不需要abstract关键字。

界面中的方法是隐式公开的。

例子 (Example)/* File name : Animal.java */

interface Animal {

public void eat();

public void travel();

}

实现接口

当类实现接口时,您可以将类视为签订合同,同意执行接口的特定行为。 如果类不执行接口的所有行为,则类必须将其自身声明为抽象。

类使用implements关键字来实现接口。 implements关键字出现在声明的extends部分之后的类声明中。

例子 (Example)/* File name : MammalInt.java */

public class MammalInt implements Animal {

public void eat() {

System.out.println("Mammal eats");

}

public void travel() {

System.out.println("Mammal travels");

}

public int noOfLegs() {

return 0;

}

public static void main(String args[]) {

MammalInt m = new MammalInt();

m.eat();

m.travel();

}

}

这将产生以下结果 -

输出 (Output)Mammal eats

Mammal travels

当重写接口中定义的方法时,有几个规则要遵循 -除了接口方法声明的实现方法或接口方法声明的子类之外,不应在实现方法上声明已检查的异常。

覆盖方法时,应保持接口方法的签名和相同的返回类型或子类型。

实现类本身可以是抽象的,如果是,则不需要实现接口方法。

实现接口时,有几条规则 -一个类一次可以实现多个接口。

一个类只能扩展一个类,但实现了许多接口。

接口可以扩展另一个接口,类似于类可以扩展另一个类。

扩展接口

接口可以扩展另一个接口,其方式与类可以扩展另一个类的方式相同。 extends关键字用于扩展接口,子接口继承父接口的方法。

以下体育界面由曲棍球和足球界面扩展。

例子 (Example)// Filename: Sports.java

public interface Sports {

public void setHomeTeam(String name);

public void setVisitingTeam(String name);

}

// Filename: Football.java

public interface Football extends Sports {

public void homeTeamScored(int points);

public void visitingTeamScored(int points);

public void endOfQuarter(int quarter);

}

// Filename: Hockey.java

public interface Hockey extends Sports {

public void homeGoalScored();

public void visitingGoalScored();

public void endOfPeriod(int period);

public void overtimePeriod(int ot);

}

Hockey界面有四种方法,但它继承了Sports的两种方法; 因此,实现Hockey的一个类需要实现所有六种方法。 同样,一个实现足球的类需要定义来自Football的三种方法和来自Sports的两种方法。

扩展多个接口

Java类只能扩展一个父类。 不允许多重继承。 但是,接口不是类,接口可以扩展多个父接口。

extends关键字使用一次,父接口在逗号分隔列表中声明。

例如,如果Hockey接口扩展了Sports和Event,它将被声明为 -

例子 (Example)public interface Hockey extends Sports, Event

标记接口

当父接口不包含任何方法时,会发生扩展接口的最常见用法。 例如,java.awt.event包中的MouseListener接口扩展了java.util.EventListener,定义为 -

例子 (Example)package java.util;

public interface EventListener

{}

其中没有方法的接口称为tagging接口。 标记接口有两个基本设计目的 -

Creates a common parent - 与EventListener接口(由Java API中的许多其他接口扩展)一样,您可以使用标记接口在一组接口中创建公共父级。 例如,当接口扩展EventListener时,JVM知道将在事件委托方案中使用此特定接口。

Adds a data type to a class - 这种情况是术语标记的来源。 实现标记接口的类不需要定义任何方法(因为接口没有任何方法),但是类通过多态变成了接口类型。

Java - 封装(Encapsulation)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值