Java 中的接口有什么作用?

文章介绍了接口在日常生活和Java编程中的概念,通过举例说明接口如何确保不同组件间的顺利交互。在Java中,接口降低了类的依赖性,提高了代码的独立性和可维护性。通过定义接口,可以规范方法的入参和出参,使得更换实现变得更简单。接口还有标记功能,如Serializable表示类支持序列化。文章强调接口的稳定性至关重要,一旦定制不宜随意修改。
摘要由CSDN通过智能技术生成

highlight: idea

日常生活中,两个实体之间进行连接的部分称为接口。如电脑和U盘连接的标准USB接口。接口可以确保不同 实体之间的顺利连接。如不同的电脑厂家和U盘厂家只要按照相同的USB接口进行生产,那么所有的电脑和U 盘就可以顺利的连接起来。

Java编程领域中,接口可以为不同类顺利交互提供标准。

例如:老师让学生张三和李四 一起完成java程序来模拟营业员和计算器的行为。张三和李四进行工作分工,张三写计算机器,李四写营业员类。
张三和李四没有定义接口会出现的问题如下:


张三先定义了一个计算器类Calculator类并提供计算的方法

public class Calculator{ 
    public double count(double salary,double bonus){ 
        return salary+bonus; 
        } 
    } 

李四定义了代表营业员的Seller类 :注意这里计算器的方法

public class Seller{ 
    String name;//营业员的名称 
    Calculator calculator ; 
    public Seller(String name, Calculator calculator) { 
        super(); 
        this.name = name; 
        this.calculator = calculator; } 
        //计算的方法 
        public void quote(double salary,double bonus){ 
            System.out.println(name+"说:您好:请支付"+calculator.countMoney(salary, bonus)+"元。"); 
} 

我们看到李四开发的时候想使用张三已经写好的计算器的类,李四想当然的认为计算钱的方法是countMoney, 但是张三写计算器的时候使用的方法是count,那么李四的写的Seller类是错误的。

实现接口的好处如下: 为了保证张三和李四的书写的类可以正确的完成交互,李四定义了一个接口,并要求张三必须实现这个接口, 接口的代码如下:

interface Icount{ 
    public double countMoney(double salary,double bonus); 
    } 

那么张三在写计算器Calculator类的时候,实现Icount接口必须重写接口中的抽象方法 。那么张三的代买 就应该是如下的:

public class Calculator implemenets Icount{ 
    public double countMoney(double salary,double bonus){ 
        return salary+bonus; 
        } 
    } 

这样就李四的代码就可以正常的执行了。

接口可以降低类的依赖性,提高彼此的独立性

张三现在觉得计算器类的名字改成SuperCalculator更合适那么张三写的类代码就应该如下:

public class SuperCalculator implements Icount{ 
    public double countMoney(double salary,double bonus){ 
        return salary+bonus; 
        } 
    } 

李四的代码如下注意这里计算的使用接口来声明:

public class Seller{ 
    String name;//营业员的名称 
    Icount calculator; //这里使用接口声明 
    public Seller(String name, Calculator calculator) { 
        super(); 
        this.name = name; 
        this.calculator = calculator;
    } 
    //计算的方法 
    public void quote(double salary,double bonus){ 
          System.out.println(name+"说:您好:请支付"+calculator.countMoney(salary, bonus)+"元。"); 
    } 
}

由以上的代码来看张三的类无论命名成什么李四的代码都不需要改,所以代码的依赖性降低,便于程序的维 护。

规范下游

只要有了接口,下游就必须按照接口的方式来规范自己的入参和出参。如果将来不想用某个人的实现,就不用大肆的修改代码。因为其他人也是实现你的接口创造的方法,直接改用其他人的包就好。所有的东西都已经被你给规范了。他们实现里面即使写出花来,接口的名字,入参类型,入参个数,返回值类型,都无法改变。
随着历史的推移,如果想要修改之前的实现。因为有接口的功劳,很多地方的改动,也不会引起太大的连锁效应。毕竟接口规范了很多东西。

标记功能

我们在想要设计接口时,只是简单的定义了几个方法,通过继承实现的方式越来越多,但是有的接口没有任何方法,例如Serializable、RandomAccess和Cloneable,在查看JDK源码或开源项目源码的时候,这些标记接口的上镜率相当之高,它们不包含任何的方法,但是却广泛的存在。java.io.Serializable这个接口是用来标记类是否支持序列化的,Cloneable接口在深度拷贝的时候经常被用到,它的作用是标记该对象是否拥有克隆的能力。在我们自己设计接口时也可以利用这种思想,某个类实现了哪个接口,就代表着他能做哪些功能。

接口在使用的时候需要注意以下几点:
  • 接口是系统中最高层次的抽象类型 。
  • 接口本身必须十分稳定,接口一旦定制,就不允许随意修改,否则对接口实现类以及接口访问都会造成影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值