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

Java进阶学习笔记15——接口概述

认识接口:

Java提供了一个关键字Interface,用这个关键字我们可以定义一个特殊的结构:接口。

接口不能创建对象。

注意:接口不能创建对象,接口是用来被类实现(implements)的,实现接口的类称为实现类。

一个类可以实现多个接口(接口可以理解为干爹),实现类实现多个接口,必须重写全部接口的全部抽象方法,否则实现类需要定义成抽象类。

父类只有一个,干爹能有多个。

抽象类是需要继承的,继承只能单继承,你如果继承了抽象类,那你就不能继承其他类。

package cn.ensource.d7_interface;// 实现类
public class D implements B, C{@Overridepublic void testb1() {}@Overridepublic void testb2() {}@Overridepublic void testc1() {}@Overridepublic void testc2() {}
}

接口的好处(重点)

1)弥补了类单继承的不足,一个类同时可以实现多个接口;

2)让程序员可以面向接口编程, 这样程序员就可以灵活方便地切换各种业务实现。

我们可以多创建几个方法,何必要通过接口来实现呢?

这个是特别有必要的。

其实可以理解为不是每个人都会所有人都会的,得靠具体实现的这个人到底会什么,接口就相当于这个实例化的人会的技能。

开发的时候接口是别人写的,你是调别人的,所以具体的内容不是你写的。

这样写的话,逻辑清晰,一看就看出哪里是重点,后期好维护。

使用接口可以轻松方便地新建类,而不是在已有类中修改。

implement接口可以显现地知道你是谁,能做什么?

一个接口被多个类实现,有什么好处呢?

面向接口编程。

package cn.ensource.d8_interface2;public class Test {public static void main(String[] args) {// 目标:搞清楚使用接口的好处Driver s = new A();s.drive();Driver d = new B();  // 程序可以面向接口进行编程d.drive();           // 父类类型指向子类对象 多态}
}class B implements Driver{@Overridepublic void drive() {}
}class A extends Student implements Driver, Singer{@Overridepublic void drive() {System.out.println("A可以driver");}@Overridepublic void sing() {System.out.println("A可以sing");}
}class Student {}interface Driver {void drive();
}interface Singer {void sing();
}

接口的好处:

解决类单继承的问题,通过接口,我们可以让一个类有一个亲爹的同时,还可以找多个干爹去拓展自己的功能。

为什么我们要通过接口,也就是去找干爹,来拓展自己的功能呢?

因为通过接口去找干爹,别人通过你implements的接口,就可以显现地知道你是谁,从而也就可以放心的把你当做谁来用了。

使用接口的第二个好处是什么?

一个类我们说可以实现多个接口,同样,一个接口也可以被多个类实现的,这样做的好处是我们的程序就可以面相接口编程了,这样我们程序员就可以方便的灵活切换各种业务实现了。 而不用改后续代码了。

接口不能实例化

接口如何实现实例化呢?参照多态的方式,通过实现类对象实例化,这叫接口多态。

多态的形式:具体类多态、接口类多态、接口多态。

接口的子类:

要么重写接口中的所有抽象方法。

要么子类也是抽象方法。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 强烈推荐 20.7k Star!企业级商城开源项目强烈推荐!基于DDD领域驱动设计模型,助您快速掌握技术奥秘,实现业务快速增长
  • K8S认证|CKA题库+答案| 11. 创建PVC
  • 程序员都能当黑客吗?IT男、码农和程序猿有啥区别?
  • fastapi中实现多个路由请求
  • 头歌OpenGauss数据库-I.复杂查询第4关:计算平均分
  • java在类的定义中创建自己的对象?
  • 如何高效创建与配置工程环境:零基础入门
  • MybatisPlus优雅实现加密?
  • 基于Android studio 订餐、外卖系统
  • 每日一题《leetcode--398.随机数索引》
  • sqlserver 创建表,列及表,列描述
  • 【C++进阶】AVL树
  • MySQL-笔记-02.关系模型基本理论
  • Android四大组件 Broadcast广播机制
  • 微信小程序毕业设计-智慧旅游平台系统项目开发实战(附源码+演示视频+LW)
  • [译]CSS 居中(Center)方法大合集
  • 10个确保微服务与容器安全的最佳实践
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Angular 2 DI - IoC DI - 1
  • Angular Elements 及其运作原理
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • css的样式优先级
  • extjs4学习之配置
  • JavaScript类型识别
  • Joomla 2.x, 3.x useful code cheatsheet
  • leetcode388. Longest Absolute File Path
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 初识 webpack
  • 初探 Vue 生命周期和钩子函数
  • 多线程 start 和 run 方法到底有什么区别?
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 前端
  • 一些css基础学习笔记
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​2020 年大前端技术趋势解读
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​如何使用QGIS制作三维建筑
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • ###项目技术发展史
  • $().each和$.each的区别
  • (2)MFC+openGL单文档框架glFrame
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (BFS)hdoj2377-Bus Pass
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (回溯) LeetCode 78. 子集
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (十八)三元表达式和列表解析
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)c++ std::pair 与 std::make