一、浅析java接口

java接口是java语言中存在的一种特定结构,它有其特定的语法结构。其声明语法格式如下

[可见度] interface 接口名称 [extends 其他的接口名] {// 声明变量// 抽象方法
}

Interface关键字用来声明一个接口。下面是接口声明的一个简单例子。

import java.lang.*;
//引入包
public interface NameOfInterface
{//任何类型 final, static 字段//抽象方法
}

关于接口,重点需要注意以下两点,接下来我分两部分详细说明。

二、接口与类

        编写接口的方式与类相似,但接口不同于类。简单来说,二者最本质的区别便是类描述对象的属性和方法,而接口则包含类要实现的方法。二者的异同总结如下:

首先说相似处,一个接口中可以有多个方法,例如下方代码所示:

interface Person {
   public void eat();
   public void drink();
}

另外,接口文件保存在 .java 结尾的文件中,文件名使用接口名。同时接口的字节码文件保存在 .class 结尾的文件中,接口相应的字节码文件必须在与包名称相匹配的目录结构中。

接口与类的不同之处主要有:

  • 接口不能用于实例化对象;
  • 接口没有构造方法;
  • 接口中所有的方法必须是抽象方法,Java 8 之后接口中可以使用 default 关键字修饰的非抽象方法;
  • 接口不能包含成员变量,除了 static 和 final 变量;
  • 接口不是被类继承了,而是要被类实现;
  • 接口支持多继承。

三、接口的实现~

        接口无法被实例化,但可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。

接口的实现~~(用implements关键字)

...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...

 举个栗子!!

public class talent implements Person{public void eat(){System.out.println("talents eats");}public void drink(){System.out.println("talents drink");} public int noOfLegs(){return 0;}public static void main(String args[]){talents t = new talents();t.eat();t.drink();}
}

  四、为啥使用接口?

作为一个纯小白,在自学期间就在思考一个问题,为啥就非得使用接口呢?用类不也可以实现同样的效果吗??(我不理解)关于这点,在一番求学后,才后知后觉,现对此做以下解释:

(出自:接口是什么?为什么要使用它?_渣渣猪的博客-CSDN博客_接口是什么 )

通俗来说便是,在Java 编程领域中,接口可以为不同类顺利交互提供标准。

例如:老师让学生张三和李四一起完成,java 程序来模拟营业员和计算器的行为。张三和李四进行工作分工,张三写计算机器,李四写营业员类。

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

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

李四定义了代表营业员的 Seller 类:

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

那么张三的代码就应该是如下的:

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;}
}

李四的代码如下:

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)+"元。");}
}

因此,张三的类无论命名成什么李四的代码都不需要改,所以代码的依赖性降低,便于程序的维护。(取自博客:为什么要使用接口-java - 别再闹了 - 博客园)

这就是接口的强大之处,也是它必不可少的重要程度的影射体现。

五、接口的继承

接口的继承使用extends关键字,子接口继承父接口的方法。一个接口能继承另一个接口,和类之间的继承方式比较相似。举例如下:

public interface Sports
{public void setHomeTeam(String name);public void setVisitingTeam(String name);
}public interface Football extends Sports
{public void homeTeamScored(int points);public void visitingTeamScored(int points);public void endOfQuarter(int quarter);
}public interface Hockey extends Sports
{public void homeGoalScored();public void visitingGoalScored();public void endOfPeriod(int period);public void overtimePeriod(int ot);
}

Football接口自己声明了三个方法,从Sports接口继承了两个方法,这样,实现Football接口的类需要实现六个方法。相似的,实现Hockey接口的类需要实现六个方法,其中两个来自于Sports接口。

在Java中,类的多继承是不合法,但接口允许多继承。在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。 如下所示:

public interface Hockey extends Sports, Event

 六、标记接口

最常用的继承接口是没有包含任何方法的接口。标记接口的作用:简单形象的说就是给某个对象打个标(盖个戳),使对象拥有某个或某些特权。

package java.util;
public interface EventListener
{}

标记接口主要用于以下两个目的:

  • 建立一个公共的父接口:正如EventListener接口,这是由几十个其他接口扩展的Java API,你可以使用一个标记接口来建立一组接口的父接口。例如:当一个接口继承了EventListener接口,Java虚拟机(JVM)就知道该接口将要被用于一个事件的代理方案。
  • 向一个类添加数据类型:这种情况是标记接口最初的目的,实现标记接口的类不需要定义任何接口方法(因为标记接口根本就没有方法),但是该类通过多态性变成一个接口类型。

一文读懂Java接口相关推荐

  1. 一文读懂Java中File类、字节流、字符流、转换流

    一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...

  2. JVM(一)一文读懂Java编译全过程

    一文读懂Java编译全过程 java代码首先要通过前端编译器编译成.class字节码文件,然后再按一定的规则加载到JVM(java 虚拟机)内运行,有三种运行方式,解释模式(javac).编译模式(C ...

  3. java中date类型如何赋值_一文读懂java中的Reference和引用类型

    简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型.java为引用类型专门定义了一个类叫做Reference.Reference是跟jav ...

  4. 一文读懂 Java 工程师学习路线!

    作者 | 三太子敖丙 来源 | 三太子敖丙(ID:NiceOffer) 在写这个文章之前,我花了点时间,自己臆想了一个电商系统,基本上算是麻雀虽小五脏俱全,我今天就用它开刀,一步步剖析,我会讲一下我们 ...

  5. java序列化_夯实Java基础系列22:一文读懂Java序列化和反序列化

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  6. 一文读懂Java泛型中的通配符 ?

    之前不太明白泛型中通配符"?"的含义,直到我在网上发现了Jakob Jenkov的一篇文章,觉得很不错,所以翻译过来,大家也可以点击文末左下角的阅读原文看英文版的原文. 下面是我的 ...

  7. 一文读懂 Java 字符串相关知识点和常见面试题

    点击上方"黄小斜",选择"置顶或者星标" 你关注的就是我关心的! 作者:黄小斜 来源:微信公众号[程序员黄小斜] 目录 string基础 Java String ...

  8. 「Java基本功」一文读懂Java内部类的用法和原理

    内部类初探 一.什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能 ...

  9. 一文读懂 JAVA 异常处理

    JAVA 异常类型结构 Error 和 Exeption 受查异常和非受查异常 异常的抛出与捕获 直接抛出异常 封装异常并抛出 捕获异常 自定义异常 try-catch-finally try-wit ...

最新文章

  1. edgesForExtendedLayout、automaticallyAdjustsScrollV
  2. linux默认csh修改命令,Solaris中默认Shell的修改以及命令行补全的设置
  3. CentOS 3.7 安装Linux kexec工具失败
  4. windbg查看设备栈设备树学习总结
  5. RBAC(基于角色的权限访问控制)
  6. sqlserver安装显示句柄无效_Sqlserver 2016 R Service环境安装的各种错误(坑)解决办法...
  7. oracle中substrb用法,oracle中substr和instr的用法
  8. 201671010139 2016-2017-2 JAVA 和C语言的语法区别
  9. java web容器_java-实现一个简单的java Web容器
  10. java生成有理数_JAVA程序设计-有理数类的设计
  11. UCBCS188 AI学习笔记(2)informed search (启发函数搜索)
  12. Eclipse + keil 使用教程
  13. WOW战斗逻辑系统分析
  14. Whitelabel Error Page 白页
  15. 图的应用:骑士周游问题
  16. 【Caffe学习01】在Caffe中trian MNIST
  17. 直播间小游戏,带货直播源码如何实现?
  18. Q390GJE低合金高强度钢简介
  19. rank over pation
  20. 国产电源厂家及具体型号pin-to-pin替代手册

热门文章

  1. 损失惨重!数据中心失火,360万个网站下线,Rust游戏25台服务器数据永久丢失...
  2. mysql中字段约束unique_什么是MySQL UNIQUE约束,我们如何将其应用于表的字段?
  3. SDUT OJ 蟠桃记
  4. 如何在Ubuntu 20.04 / 18.04服务器中进入救援模式或紧急模式?
  5. 视数字人民币为假想敌——数字美元的来龙去脉
  6. 怎么让计算机联网,如何让电脑自动联网
  7. JavaScript实现flatten
  8. Qt编写可视化大屏电子看板系统15-曲线面积图
  9. 中国人寿在线笔试可以用计算机嘛,中国人寿集团校园招聘笔试经验
  10. login登录页面 html,login.html