Java —— 接口

【概述】

接口(interface)是与类并行的一个概念,由于 Java 中不支持多继承,但有时需要用到多继承的效果,因此有了接口。

通过接口可以实现不相关类的相同行为,而不需要考虑这些类的层次关系,此外接口可以指明多个类需要的实现方法,从而用于定义对象的扩张功能,接口还可以用于定义规范,解除耦合关系。

接口可以看做一个特殊的抽象类,是常量与抽象方法的定义的集合,只包含常量与方法的定义而没有实现,即接口中的所有方法都没有方法体,并且接口没有构造器,无法进行实例化。

接口与接口之间可以实现多继承,即接口可以有多个直接父接口。

【定义】

接口的定义就是一种功能,其功能可以被类所实现,通过 interface 关键字来定义接口,若想建一接口文件,要求接口文件的文件名与接口名相同。

[public] interface 接口名 [extends 父接口名列表]{
    public static final 常量名;
    public abstract 方法返回类型 方法名();
}

【实现】

在类实现接口时,需要使用关键字 implements,并且必须重新接口中的所有方法才可实例化,若没有重写所有的抽象方法,则此类仍为一抽象类。

[public] [abstract] class <类名> [extends 父类名] [implements 接口列表]{
    重写方法
}

实现接口时,一次可以实现多个接口,每个接口间用 " , " 分隔,此时重写方法时可能会出现常量或方法名冲突的情况,若常量冲突,则需要指明常量的接口,即:接口名.常量,若方法冲突,则仅需实现一个方法即可。

【接口回调】

接口也是一种引用型数据类型,使用接口的声明的变量称为接口变量,其中可以存放实现该接口的类的实例的引用(对象的引用)。

若只声明接口变量,此时获得的仅是一个空接口,还未向其中存入实现该接口的类的实例对象的引用。

而接口回调是指,将实现某一接口的类所创建的对象的引用赋值给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口方法,当接口变量调用被类实现的接口方法时,就是通知相应的对象调用该方法。

当一个方法的参数是接口类型的参数时,可以将实现接口的类的实例的引用传递给该接口参数,那么接口参数就可以回调类实现的接口方法。

public interface People{    //定义接口
    void say(String str);
}
public class Teacher implements People{    //Teacher实现接口
    public void say(String str){
        System.out.println(str);
    }
}
public class Student implements People{    //Student实现接口
    public void say(String str){
        System.out.println(str);
    }
}
public class Main{
    public static void main(String[] args){
        People temp;    //声明接口变量
        temp=new Teacher();    //接口变量存放对象的引用
        temp.say("老师");    //接口回调
        temp=new Student();    //接口变量存放对象的引用
        temp.say("学生");    //接口回调
    }
}

【接口与抽象类】

接口指定了系统各模块间遵循的标准,体现的是一种规范,当多个应用程序之间使用接口时,接口是多个程序之间的通信标准,因此接口一旦定义后不应经常改变。对于接口的实现者而言,接口规定了实现者必须向外提供的服务;对于接口的调用者而言,接口规定了调用者可以调用的服务。

抽象类作为多个子类的父类,其体现的是一种模板式设计,抽象父类被当作是一种中间产品,需要进一步完善。

1.共同点

1)接口、抽象类均不可被实例化,但能被其他类实现和继承。

2)接口、抽象类中均可包含抽象方法,实现接口或继承类的普通子类必须全部实现抽象方法。

2.不同点

1)接口中仅可包含抽象方法,不能包含普通方法;抽象类中可以定义普通方法。

2)接口中不能定义静态方法;抽象类中可以定义。

3)接口中只能定义静态常量属性,不能定义普通属性;抽象类中静态常量属性、普通属性均可定义。

4)接口中不能包含构造器;抽象类中包含构造器(便于让其子类调用完成初始化操作)。

5)接口中不能包含初始化块;抽象类中可以包含初始化块。

6)一个类最多只能有一个直接父类,但是一个类可以实现多个接口。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值