深入理解Java中的接口
作者:jingxian 发布时间:2023-11-08 23:52:43
一. 为什么要使用接口
假如有一个需求:要求实现防盗门的功能。门有"开"和"关"的功能,锁有"上锁"和"开锁"的功能。
分析:首先防盗门是一个门,门有开门和关门的功能,还有一把锁,锁有开锁和上锁,按照面向对象的编程的思想,我们会将门和锁都作为一个类而单独存在,但是,不能让防盗门继承自门的同时又继承自锁,防盗门不是锁,不符合继承中is a的关系,在java中支持单继承。那么我们如何来解决这一问题,这时就要用到接口。
二. 什么是接口
在软件中接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合,但是没有方法的实现,接口其实上也可以看做是一个特殊的抽象类,但是采用和抽象类完全不同的方法来表示,两者的设计理念也是不同的,抽象类有利于代码复用,接口利于代码的扩展和维护。
三. 抽象类和接口的区别:
01 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
02.抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
03.接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
04.一个类只能继承一个抽象类,而一个类却可以实现多个接口。
四. 如何定义接口
首先先来看一下语法:
[修饰符] interface 接口名 extends 父接口1,父接口2,...
{
//常量定义
//方法定义
}
在一个类中实现接口语法:
class 类名 父类名 implements 接口1,接口2,.....
{
//类成员
}
五. 定义接口注意点
01、 接口的命名规则与类相同,如果修饰符是public ,则该接口在整个项目中可见;如果省略修饰符,则该接口只在当前包中可见。
02、接口中可以定义常量,不能定义变量,如果你在接口中定义属性,那么通过反编译可以看见他会自动用public static final 修饰,接口中的属性都是全局静态常量,接口中的常量必须在定义时指定初始值。
03、接口中所有的方法都是抽象方法,接口中方法都会自动用public abstract 修饰,即接口中只有全局抽象方法。
04、接口不能实例化,接口中不能有构造。
05、接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。
06、接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。


猜你喜欢
- 由于最近公司在开发一款后台与安卓的更新系统,经过再三研究之后,也是选择Mqtt这个目前流行的框架。为了能够让项目运营起来,最终虽说是选择Ac
- 本文实例为大家分享了Android实现简单手电筒功能的具体代码,供大家参考,具体内容如下XML:<?xml version="
- 前言本文主要给大家分享了Android仿网易新闻图片详情下滑隐藏效果的相关内容,分享出来供需要的朋友参考学习,下面话不多说了,来一起看看详细
- 在之前的章节中,我们都是假设程序中只有一条执行流,程序从main方法的第一条语句逐条执行直到结束。从本节开始,我们讨论并发,在程序中创建线程
- 前言在一些开源的框架的源码当中时不时都可以看到volatile这个关键字,最近特意学习一下volatile关键字的使用方法。volatile
- 本文实例讲述了C#中WinForm跨线程访问控件的实现方法,分享给大家供大家参考。具体实现方法如下:1、跨线程访问控件委托和类的定义usin
- gradle下载慢问题解决方法下载之后自行安装 ps:就是手动更新。官网地址和gradle各版本下载地址:官网:http://gradle.
- 本文实例为大家分享了PopupWindow+RecyclerView实现上下滑动框功能的具体代码,供大家参考,具体内容如下1.新建一个适配器
- 一、前言Unity3D不仅仅可以开发游戏,还有非常多的开发方向,秉承着兴趣为先,将可以使用Unity制作的各种应用案例,分享如何进行开发,如
- 一、lombok简介lombok 提供了使用注解的形式帮助简化消除java代码。在编写Java代码时,通过使用对应的注解,可以简化开发,同时
- 本文实例讲述了C#静态static的用法,分享给大家供大家参考。具体用法分析如下:一、静态类静态类与非静态类的重要区别在于静态类不能实例化,
- 前言前段时间一直使用到word文档转pdf或者pdf转word,寻思着用Java应该是可以实现的,于是花了点时间写了个文件转换工具源码wel
- 一、默认静态资源路径类路径下:staticpublicresources这几个目录为默认静态资源访问的目录二、增加静态资源路径前缀动态资源和
- Android 列表组件 ListView列表组件是开发中经常用到组件,使用该组件在使用时需要为它提供适配器,由适配器提供来确定显示样式和显
- 前言在上一篇文章中,我们分析了Spring中Bean的实例化过程,在结尾我们知道了虽然bean的实例化完成了,但是其中的属性还没有被注入,今
- 前几天客户提需求,对App增加一个功能,这个功能目前市面上已经很常见,那就是应用内切换语言。啥意思,就是 英、中、法、德、日。。。语言随意切
- 最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指
- 获取Android的ROOT权限其实很简单,只要在Runtime下执行命令"su"就可以了。// 获取ROOT权限pub
- 本文实例为大家分享了Android匹配关键字标红的具体代码,供大家参考,具体内容如下1. 单关键字匹配若只需匹配 搜索内容 可以
- Java8的groupingBy实现集合的分组,类似Mysql的group by分组功能,注意得到的是一个map对集合按照单个属性分组、分组