当前位置: 首页 > news >正文

java linux 接口_理解Java中的接口

一.为什么要使用接口

假如有一个需求:要求实现防盗门的功能。门有"开"和"关"的功能,锁有"上锁"和"开锁"的功能。

分析:首先防盗门是一个门,门有开门和关门的功能,还有一把锁,锁有开锁和上锁,按照面向对象的编程的思想,我们会将门和锁都作为一个类而单独存在,但是,不能让防盗门继承自门的同时又继承自锁,防盗门不是锁,不符合继承中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.接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。

0b1331709591d260c1c78e86d0c51c18.png

相关文章:

  • java dns 缓存_Java DNS解析缓存的过期策略配置
  • java 二叉树图形_java实现二叉树以及实例
  • java tree的使用_Java TreeSet的使用
  • java矩形_JAVA实现矩形(长方形)的周长面积计算
  • phymeleaf 除取整_【Bug档案01】Spring Boot的控制器+thymeleaf模板 -使用中出现静态资源加载路径不当的问题 -解决时间:3h...
  • python 矩阵乘法梯度下降_使用python numpy矩阵类的梯度下降
  • oracle 存储过程调用java_oracle 存储过程调用java一
  • java春天_java – 春天的Aspectj
  • java开发微信设计论文_集客微信公众号: 本科毕业设计:基于WxJava框架的集客微信公众号的设计与实现...
  • java 判断是不是英文怎么说_java判断一个字符串是中文还是英文
  • linux+mysql运算符_MySQL 运算符
  • saxreader java_SAXReader saxReader = new SAXReader();来解析xml文件
  • 埃森哲java转sfdc_【SFDC salesforce职责】2021年埃森哲SFDC salesforce岗位职责-看准网...
  • JAVA循环读取菜单_java循环菜单
  • mysql一条sql的执行过程_【MySQL深入】一条SQL的执行过程
  • [笔记] php常见简单功能及函数
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 4. 路由到控制器 - Laravel从零开始教程
  • Akka系列(七):Actor持久化之Akka persistence
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java教程_软件开发基础
  • Java面向对象及其三大特征
  • Js基础知识(四) - js运行原理与机制
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Python打包系统简单入门
  • SpriteKit 技巧之添加背景图片
  • Vue小说阅读器(仿追书神器)
  • 程序员该如何有效的找工作?
  • 分享一份非常强势的Android面试题
  • 机器学习中为什么要做归一化normalization
  • 计算机在识别图像时“看到”了什么?
  • 如何在 Tornado 中实现 Middleware
  • 深入浏览器事件循环的本质
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 一些关于Rust在2019年的思考
  • Spring第一个helloWorld
  • 数据可视化之下发图实践
  • 我们雇佣了一只大猴子...
  • 选择阿里云数据库HBase版十大理由
  • 整理一些计算机基础知识!
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • (06)Hive——正则表达式
  • (c语言)strcpy函数用法
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (二)fiber的基本认识
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (一)appium-desktop定位元素原理
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Oracle 9i 数据库设计指引全集(1)
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .mysql secret在哪_MYSQL基本操作(上)