[Java基础揉碎]接口

目录

为什么有接口

 基本介绍

 接口的应用场景

注意事项和细节

 接口和继承类的比较

总结

>接口和继承解决的问题不同

>接口比继承更加灵活

>接口在一定程度上实现代码解耦

接口的多态特性

多态参数

​编辑

 多态数组

多态传递

​编辑


为什么有接口

usb插槽就是现实中的接口. 你可以把手机, 相机, u盘都插在usb插槽上, 而不用担心哪个插槽是专门插哪个的, 原因是做usb插槽的厂家和做各种设备的厂家都遵守了统一的规定包括尺寸,排线等等。 

这样的设计需求在java编程/php/.net/go中也是会大量存在的,一个程序就是一个世界, 在现实世界存在的情况,在程序中也会出现。我们用程序来模拟一 下。

在接口中也去规定两个方法 

phone去实现这个接口 , 必须要去实现接口规定的方法 

相机也去实现这个接口 , 必须要去实现接口规定的方法 

在计算机类的方法中, 就可以直接把接口接进来放在形参中(就像现实中把手机相机通过usb连接电脑)

实例化手机和相机后, 直接接入到电脑的方法中, 电脑便可以执行手机相机的内容

 基本介绍

接口就是给出一些没有实现的方法,封装到一起到某个类要使用的时候,在根据具体情况把这些方法写出来。

语法: 

        interface接口名{

                //属性

                //方法

           }

        class 类名 implements 接口{

                自己属性;

                自己方法;

                必须实现的接口的抽象方法 

          }

小结:

1.在Jdk7.0前接口里的所有方法都没有方法体,即都是抽象方法。

2. Jdk8.0后接口可以有静态方法,默认方法,也就是说接口中可以有方法的具体实现

 

 接口的应用场景

对初学者讲, 理解接口的概念不算太难, 难的是不知道什么时候使用接口

下面我例举几个应用场景:

1.说现在要制造战斗机, 武装直升机, 专家只需把飞机需要的功能/规格定下来即可,然后让别的人具体实现就可。

2.说现在有一个项目经理,管理三个程序员功能开发一个软件,为了控制和管理软件,项目经理可以定义一些接口,然后由程序员具体实现。 (使得下面的类规范, 确定方法名调用形式, 能够更好的控制软件的质量, 它的功能, 接口还涉及到同一调用的问题-->接口编程)

 例如这有一个要求:

要求3个程序员,编写三个类,分别完成对Mysql,Oracle,DB2数据库的连接  connect, close.

这里三个程序员第一个用的方法名f1() ,f2(); 第二个用的con(), close(); 第三个用的 connect(), close()

 假使这里有一个类, 要去连接这三个数据库, 会发现方法命都没办法统一, 要去分别调用这几个方法, 非常的麻烦

如果用接口去管理这几个类, 要求三个类都去实现这个接口, 方法名就同一了

直接创建三个类的对象, 把它放到这个接口里面就知道到底需要连哪个数据库了 

注意事项和细节

1) 接口不能被实例化

2) 接口中所有的方法是public方法, 接口中抽象方法, 可以不用abstract 修饰

3) 一个普通类实现接口, 就必须将该接口的所有方法都实现

4) 抽象类实现接口, 可以不用实现接口的方法

5) 一个类同时可以实现多个接口

6) 接口中的属性,只能是final的,而且是public static final修饰符

        比如: int a=1;实际上是public static final int a=1;(必须初始化)

7)接口中属性的访问形式: 接口名.属性名

8)一个接口不能继承其它的类,但是可以继承多个别的接口

        [举例] interface A extends B,C{}

9) 接口的修饰符只能是public和默认,这点和类的修饰符是一样的

 接口和继承类的比较

以下图为例, 小猴子要学会爬树, 只需要继承老猴子就可以了, 因为本来猴子天生就会爬树, 但是如果小猴子还想要飞行, 想要游泳, 就需要去实现 , 因为这些不是他会的, 所以可以说在Java机制中接口是单继承的一种补充

代码

定义一个猴子类 

 小猴子去继承

这里可以直接打印出来猴子天生就会爬树了 

定义一个接口游泳, 小猴子去继承并实现 

猴子也可以游泳了, 就是继承的一种补充机制 

同理, 再去实现一个小鸟接口 ,猴子也可以飞行了

 小结:

当子类继承了父类,就自动的拥有父类的功能

如果子类需要扩展功能,可以通过实现接口的方式扩展

可以理解实现接口是对java单继承机制的一种补充

总结

实现接口vs继承类

>接口和继承解决的问题不同

继承的价值主要在于:解决代码的复用性和可维护性。

接口的价值主要在于:设计,设计好各种规范(方法),让其它类去实现这些方法。

>接口比继承更加灵活

接口比继承更加灵活,继承是满足is - a的关系,而接口只需满足 like - a的关系。

>接口在一定程度上实现代码解耦

接口的多态特性

多态参数

为什么camera和phone都可以传进去work当中, 是因为都实现了UsbInterface接口, 这里就体现除了接口多态参数 

 多态数组

可以把手机对象和相机对象同时放在接口数组里, 通过((Phone) usbs[i]).call();向下转型去分别调用各自的方法

多态传递

一个接口继承另外一个接口, 继承这个接口的类同时继承了它, 如果IH中有方法, 那么Teacher中也可以重写它, 这就是多态传递;

注意: 如果c继承的b和实现的a中都有x, 不能直接使用, 应为编译器不知道是谁, 接口因为定义的属性实际上是public static final的常量, 所以用类名点去访问, 继承的父类则用super访问 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/294007.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Educational Codeforces Round 163 (Rated for Div. 2) E. Clique Partition

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e9, maxm 4e4 5; co…

halcon图像腐蚀

1、原理 使用结构元素在图像上移动&#xff0c;只有结构元素上的所有像素点都属于图像中时&#xff0c;才保留结构元素中心点所在的像素&#xff0c;常用于分离连接的两个物体、消除噪声。 2、halcon代码 dev_open_file_dialog (read_image, default, default, Selection) r…

【Java八股面试系列】Arraylist和HashMap的底层原理

文章目录 ArrayList源码总&#xff1a;构造方法扩容机制remove HashMap总&#xff1a;构造方法细节问题putVal()方法resize()方法Hash值 HashMap常见问题 ConcurrentHashMap总&#xff1a;putVal()方法自己的测试 为什么重写HashCode和equals ArrayList源码 总&#xff1a; *…

C++template之类模版进一步了解

目录 一、类模板实例化 1.非类型模版参数 2.函数模板的特化 3.类模板特化 3.1全特化 3.2偏特化 3.2.1部分特化 3.2.2对参数进一步限制 二、注意事项 1.类模板的定义和声明要在同一个文件&#xff0c;不然容易出错 前言&#xff1a;这一篇是在我的上一篇文章的基础上&am…

网络安全接入认证-802.1X接入说明

介绍 802.1X是一个网络访问控制协议&#xff0c;它可以通过认证和授权来控制网络访问。它的基本原理是在网络交换机和认证服务器之间建立一个安全的通道&#xff0c;并要求客户端提供身份验证凭据。如果客户端提供的凭据是有效的&#xff0c;交换机将开启端口并允许访问。否则&…

“转行做程序员”很难?这里有4个建议

近几年来&#xff0c;传统行业多处于经济下行&#xff0c;加上互联网行业的赚钱效应&#xff0c;想要转行到这一行的人越来越多&#xff0c;其中程序员这个行业更是很多人梦寐以求的。 但另一方面&#xff0c;我们也发现&#xff0c;这些想要转行的同学们往往会遇到很多困扰。…

使用Kaggle API快速下载Kaggle数据集

前言 在使用Kaggle网站下载数据集时&#xff0c;直接在网页上点击下载可能会很慢&#xff0c;甚至会出现下载失败的情况。本文将介绍如何使用Kaggle API快速下载数据集。 具体步骤 安装Kaggle API包 在终端中输入以下命令来安装Kaggle API相关的包&#xff1a; pip install…

linux bypy 定时备份到百度网盘

安装 # 先卸载安装的python-pip sudo yum remove python-pip# 下载get-pip.py文件 wget https://bootstrap.pypa.io/pip/2.7/get-pip.py sudo python get-pip.py直接访问这个地址下载文件,再导入linux更快! https://bootstrap.pypa.io/pip/2.7/get-pip.py 连接 复制上面的连…

Prometheus+grafana环境搭建mysql(docker+二进制两种方式安装)(三)

由于所有组件写一篇幅过长&#xff0c;所以每个组件分一篇方便查看&#xff0c;前两篇 Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客 Prometheusgrafana环境搭建rabbitmq(docker二进制两种方式安装)(二)-CSDN博客 1.监控mysql 1.1官方地址:…

Unity TrailRenderer的基本了解

在Unity中&#xff0c;TrailRenderer组件用于在对象移动时创建轨迹效果。通常用于增强游戏中的动态物体&#xff0c;比如子弹、飞行道具或者角色移动时的拖尾效果。 下面来了解下它的基本信息。 1、创建 法1&#xff1a;通过代码创建 using UnityEngine;public class Trail…

linux系统命令chkconfig详解,管理系统服务的工具-查看、启用、禁用和设置系统服务的启动级别

目录 一、chkconfig命令介绍 二、命令的主要作用 1、管理服务的启动和停止&#xff1a; 2、配置运行级别&#xff1a; 3、简化系统管理&#xff1a; 4、查看服务状态&#xff1a; 三、命令语法 1、基本语法 2、运行级别 四、获取帮助 1、通过help获取 2、通过man获…

Eclipse+Java+Swing实现斗地主游戏

一. 视频演示效果 java斗地主源码演示 ​ 二.项目结构 代码十分简洁&#xff0c;只有简单的7个类&#xff0c;实现了人机对战 素材为若干的gif图片 三.项目实现 启动类为Main类&#xff0c;继承之JFrame&#xff0c;JFrame 是 Java Swing 库中的一个类&#xff0c;用于创建窗…

软考 系统架构设计师系列知识点之云原生架构设计理论与实践(8)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之云原生架构设计理论与实践&#xff08;7&#xff09; 所属章节&#xff1a; 第14章. 云原生架构设计理论与实践 第2节 云原生架构内涵 14.2 云原生架构内涵 关于云原生的定义有众多版本&#xff0c;对于云原生架构的…

Java学习之类和对象、内存底层

目录 表格结构和类结构 表格的动作和类的方法 与面向过程的区别 具体实现 对象和类的详解 类的定义 属性&#xff08;field 成员变量&#xff09; 方法 示例--编写简单的学生类 简单内存分析(理解面向对象) 构造方法(构造器 constructor) 声明格式&#xff1a; 四…

探索父进程和子进程

文章目录 通过系统调用查看进程PID父进程、子进程 通过系统调用创建进程-fork初识为什么fork给父进程返回子进程的PID&#xff0c;给子进程返回0fork函数如何做到返回两个值一个变量为什么同时会有两个返回值&#xff1f;bash总结 通过系统调用查看进程PID getpid()函数可以获…

大屏可视化项目示例--基于Vue3+vite2+echart+mock+axios+dataV

图例&#xff1a; 项目环境&#xff1a; Vite、Echarts、Npm、Node、axios、mock、vue3、dataV。 项目地址&#xff1a; IofTV-Screen-Vue3: &#x1f525;(IofTV-Screen Vue3版本)一个基于 vue3、vite、Echart 框架的物联网可视化&#xff08;大屏展示&#xff09;模板&…

多尺度变换(Multidimensional Scaling ,MDS)详解

一、基本思想 MDS&#xff08;Multidimensional Scaling &#xff0c;MDS多维尺度变换&#xff09;是一种经典的降维算法&#xff0c;其基本思想是通过保持数据点之间的距离关系&#xff0c;将高维数据映射到低维空间中。 具体来说&#xff0c;MDS算法的基本步骤如下&#xff…

Cocos2dx-lua ScrollView[三]高级篇

一.概述 本文缩写说明&#xff1a;sv ScrollView, cell代表ScrollView的一个子节点 本文介绍sv的一种封装类库&#xff0c;来实现快速创建sv&#xff0c;有如下几个优点&#xff1a; 1.item的位置通过参数控制&#xff0c;提高开发效率 2.免去了调用sv的API&#xff0c;提…

Leetcode 322. 零钱兑换

心路历程&#xff1a; 这道题和上一道完全平方数的和基本上一摸一样&#xff0c;甚至比上一道题还简单&#xff0c;基于dp的建模&#xff1a; 状态&#xff1a;当前的目标总金额 动作&#xff1a;选哪一个硬币 返回值&#xff1a;凑成该目标总金额的最少硬币个数 这道题如果硬…

计算机网络数据链路层知识总结

物理层知识总结传送门 计算机网络物理层知识点总结-CSDN博客 功能 功能概述 一些基本概念 结点:主机、路由器链路﹔网络中两个结点之间的物理通道&#xff0c;链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。数据链路︰网络中两个结点之间的逻辑通道&a…