java接口的定义与使用_Java接口的定义与使用

1.接口概念:

接口可以理解为一种特殊的类,由全局变量和公共的抽象方法组成。

类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,他只规定这些类里必须提供某些方法。

接口是一种引用数据类型

2.接口定义:使用interface关键字

接口定义的基本语法:

[修饰符] (abstract) interface 接口名 [extends 父接口1,父接口2...] //接口可以多继承,也可以不继承,给接口起名时在最前面加个I以示区分

{

零个到多个常量定义...

零个到多个抽象方法的定义...//接口中的方法只能是抽象方法;接口中方法不能有方法体即{}

}

注意:接口就是用来被继承实现的,修饰符一般用public,不能使用private和protected

3.接口成员

全局变量:接口中的属性是全局常量,即使定义时不添加public static final 修饰符,系统也会自动加上。

方法:接口中的方法只能是抽象方法,即使定义时不添加public abstract修饰符,系统也会自动加上。

注意:接口里面没有写上public,其最终访问权限也是public,绝不是default,为了防止出现覆写接口方法时降低访问权限的错误,强烈建议在定义接口方法时一定写上public。

4.接口使用

一个类可以实现一个或多个接口,实现接口使用implements关键字。java中一个类只能继承一个父类,不够灵活,可以通过实现多个接口进行补充。

实现接口的类,必须覆写接口中的全部抽象方法

继承父类、实现接口的语法:

[修饰符] class 类名 extends 父类 implements 接口1,接口2...

{

类体部分//如果继承了抽象类需要实现继承的抽象方法;如果接受了一个接口,就要实现接口中的抽象方法

}

注:如果要继承父类,继承父类必须要在实现接口之前。

接口是一种引用数据类型。 当你定义一个新的接口时,你其实在定义一个新的引用类型 。 在你能使用数据类型名称的地方,都可以使用接口名称。如果你定义了一个类型为接口的引用变量,该变量能指向的对象所在的类必须实现了该接口。 (类似于抽象类的使用,因为抽象类或者接口里面的抽象方法没有被实现,不能直接被调用,所以不能直接实例化)(If you define a reference variable whose type is an interface, any object you assign to it must be an instance of a class that implements the interface. )

eg.//用一个接口的引用指向一个实现了接口的类对象(类似于抽象类的使用)。这样这个对象既可以是自己本身的类(或父类)类型,又可以是该接口的类型。

X x = new X();//实例化实现接口的类对象

A a = x;//向上转型

B b = x;//向上转型

a.print();

b.get();

虽然接口里从概念上来说只能有全局变量和抽象方法,但是所有的内部及结构是不受这些限制的,即在接口里面可以定义普通内部类、抽象内部类、内部接口。

eg .在一个接口内部如果使用static去定义一个内部接口,相当于 定义了一个外部接口。【了解即可】

interface A {

public void funA();

static interface B{//static修饰的内部接口,相当于一个外部接口

public void funB();

}

}

class X implements A.B{//调用内部接口要用“外部接口.内部接口的”方式,即A.B

public void funB(){} //X只需覆写接口B的抽象方法

}

接口在使用过程当中,还经常与匿名内部类配合使用

匿名内部类就是没有名字的内部类,多用于关注实现而不关注实现类的名称。

语法格式:

Interface i = new Interface(){

public void method(){

System.out.println("匿名内部类实现接口的方式");

}

}

eg.

1.先new,再调用

IPlayGame ip = new IPlayGame(){ //最后 } 要加 ;

@Override

//在内部类中实现接口的方法

public void playGame(){

System.out.println("使用匿名内部类的方式实现接口");

}

};

ip.playGame(); //可通过接口调用方法

2. 直接new 然后调用

new IPlayGame(){

@Override

//在内部类中实现接口的方法

public void playGame(){

System.out.println("使用匿名内部类的方式实现接口2");

}

}.palyGame();

5.接口与抽象类

一个抽象类可以去继承一个抽象类,但是反过来,一个接口却可以用extends关键字同时继承多个接口(但是接口不能继承抽象类)。

eg.

public interface A {

public abstract void print();

}

public interface B {

public abstract void get();

}

public interface C extends A, B { //接口C继承接口A、B

public abstract void fun();

}

public class X implements C { //X实现了接口C,则必须覆写A、B、C中所有的抽象方法

public void get() {

System.out.println("B接口的抽象方法");

}

public void print() {

System.out.println("A接口的抽象方法");

}

public void fun() {

System.out.println("C接口的抽象方法");

}

}

6.接口在实际开发中的三大核心作用:

定义不同层之间的操作标准;

表示一种操作的能力;

表示将服务器端的远程方法视图暴露给客户端。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值