java基础之接口

接口和抽象类很像,接口是把行为给抽象化,可以理解成一个抽象类抽象到极致的情况下,形成的类,也就是一个抽象类有且只有抽象方法的时候,就可以用接口来写。

一、抽象类与接口在书写上的异同

这是一个抽象类

public abstract class Animal {public abstract void sleep();public abstract void eat();}

这是一个接口

public interface Animal { void sleep();void eat();}

 从书写代码量来看,接口的书写比抽象类要简单的多

抽象类中的“abstract class”变成了“interface”,方法中的“public abstruct”均可省略

二、接口的定义

接口定义使用interface关键字

public interface Run{ void run(); }

        从用的角度来理解接口是怎么由抽象类一步一步演变来的?

        就是一个没有任何属性,全部由抽象方法组成的抽象类

三、接口中的修饰符

1.方法

接口中所有的方法默认都是public abstract 修饰的

2.成员变量

接口中所有的成员变量都由 public static final 修饰,所以记得赋值

理解:接口就是一个行业标准,既然是标准那他就是(共享、开放、不变的,所以它是类(体现出共享)、public(开放)、final(不变)

所谓的行业标准就是在,你想做一件事情不知道该怎么做的时候,去找的一个有指导作用的东西,比如你想开一家茶百道,可是不知道怎么开,这个时候你就选择加盟茶百道,然后按照他的要求去一步一步的达到要求就可以,接口在我们写代码中就是这么一个作用。

四、接口中的构造器,以及多态

1.接口没有构造方法

抽象到极致的抽象类,因为接口没办法new,但是接口可以使用多态(和抽象类类似,让接口引用,指向实现了接口的实体类对象)

因为抽象类可以使用多态,我们创建抽象类目的就是为了让它当父类来使用多态,那您可能就要说了,普通类也可以做父类呀,为什么还要有抽象类?

这是因为普通类无法保证方法的统一性。这句话怎么理解呢?如果普通父类中的方法,子类可以自由选择是否重写,而抽象类中的方法子类必须重写,就满足了使用多态的条件。

接口是抽象到极致的抽象类,所以抽象类可以使用多态,接口也可以

2.小插曲为什么必须重写抽象类的抽象方法?

您可能要说了这是与法规定的,可是我们还是要想一下原因的,这更有助于我们理解和记忆,要我说的话就是,因为子类想当个人,子类想去new对象,类可以看成是一个图纸,按照图纸才能new出对象,可是抽象方法中的抽象方法是不完善的,子类想要去必须把父类的方法完善了,才可以去new出来对象。

public static void main(String[] args) {Animal animal = new Cat();
} 

五、接口定义好之后怎么用?

public interface Run {void run();
}
public class Dog implements Run{@Overridepublic void run() {System.out.println("我是狗,我会跑");}
}

实现接口的类必须实现接口中的所有方法;

如果不实现接口中的所有方法,那么这个类也声明为抽象类,如下

public abstract class Person implements Animal{//声明为抽象类,因为未实现sleep方法@Overridepublic void eat() {}
}

六、接口与接口,接口与类之间的关系

1.接口和接口之间可以继承,同时支持多继承(java的类只支持单继承,但是接口支持多继承)

2.接口和类之间是实现关系,并且一个类可以实现多个接口

接口之间的多继承

类若想实现多继承功能

public class Cow extends Animal implements Run,Eat{
@Override
public void jump() {
//TODO Auto-generated method stub
}
@override
public void drunk() {
//TODO Auto-generated method stub
}
}

3.为什么接口可以多继承呢,类不支持多继承?

  • java类中如果多继承可能两个父类有相同的方法会冲突,接口中方法都没有方法块,只有方法名
  • 具体的实现都由实现接口的类决定 接口里的方法是抽象的,没有具体内容就可以直接去重,但是类就得作取舍

理解:这时候就有要提到《道德经》中的一句话了 “有之以为利,无之以为用”,放到这就是父类里面的方法可能是写好的,非常便利可以直接使用,接口中是除了方法签名什么都没有的,就像一个器皿,里面装什么是自己决定的,告诉你一个方向,怎么发展靠自己。

public interface A extends B,C{
}

4.与继承类似,接口和实现类之间存在多态

5、什么是接口回调

通过下面的代码理解一下:

首先定义一个接口Usb:

  • 首先定义一个接口Usb: 
public interface Usb {void service();
}
  • 然后我们定一个接口使用者 

 注意:此时接口没被实现,就已经出现了接口的调用者,这个过程就叫做接口回调

//定义接口的使用者
public class Computer {//用的过程Usb usb1;Usb usb2;Usb usb3;public void run(){if(usb1 != null){//如果第一个接口插着东西//这就是接口的使用此时接口的使用这就出现了,可是此时接口还没有被实现usb1.service();}if(usb2 != null){usb2.service();}if(usb2 != null){usb2.service();}}
}
  • 下面我们定义接口的实现者
public class Fengshan implements Usb{@Overridepublic void service() {System.out.println("风扇启动了");}
}
public class Mouse implements Usb{@Overridepublic void service() {System.out.println("鼠标启动了");}
}
public class Upan implements Usb{@Overridepublic void service() {System.out.println("U盘启动了");}
}
  •  现在测试一下
public class Test {public static void main(String[] args) {Computer computer = new Computer();//在usb1接口上插上鼠标computer.usb1 = new Mouse();//在usb2接口上插上风扇computer.usb2 = new Fengshan();//在usb3接口上插上U盘computer.usb3 = new Upan();computer.run();}
}

七、接口和抽象类的异同:

  • 1、接口中的方法默认是抽象方法,在接口中不能有实现(java8开始允许接口方法有默认实现,使用default关键字);抽象类可以有非抽象方法)
public interface A {default void have(){System.out.println("我有A");}
}

此时Cat不一定非要重写A接口中的hava方法

public class Cat implements Animal,A{@Overridepublic void sleep() {}@Overridepublic void eat() {}}

 

  • 2、接口中的变量默认是final类型,抽象类中则不一定
  • 3、一个类可以实现多个接口,但是最多只能继承一个抽象类
  • 4、一个了尅实现接口的话,需要实现接口中的所有方法,而抽象类则不一定
  • 5、从设计层来说,抽象对类的抽象,是一种模版设计,而接口是行为的抽象是一种行为的规范

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

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

相关文章

五、 计算机网络(考点篇)

1 网络概述和模型 计算机网络是计算机技术与通信技术相结合的产物,它实现了远程通信、远程信息处理和资源共享。计算机网络的功能:数据通信、资源共享、管理集中化、实现分布式处理、负载均衡。 网络性能指标:速率、带宽(频带宽度或传送线路…

什么是人力资源管理审计

企业管理者可以通过会计审计了解公司的财务状况,对企业同样重要的人力状况如何要怎样了解呢?要怎样提高人力资源部门的运行能力?如何实施各种人力资源功能? 相对与财务、会计审计而言,人力资源审计在我国管理层中还是一…

驱动电机液冷冷却系统

1.自然冷却 自然冷却也可以看作是被动散热,它是依靠驱动电机自身的硬件结构,把热量从里经由金属材料向外散热,所以也就不会造成太多的成本支出,但是整体的散热效果并不太好。 考虑到低成本的原因,自然冷却就不能加装…

【简历】重庆某一本大学:JAVA简历指导,中厂通过率较低

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 这是一份重庆某一本大学Java同学的简历。那么因为学校是一个一本的学校,就先要确定就业层次在中厂或者大厂,但是…

串联式 VS 并联式电源连接拓扑

https://download.csdn.net/download/qq_42605300/89538758https://download.csdn.net/download/qq_42605300/89538758串联式电源连接拓扑: 缺点:公共阻抗耦合,引入更多共模干扰。 并联式(星型)电源连接拓扑: 缺点:接地…

【Python】基础语法(顺序语句、条件语句、循环语句)

一、顺序语句 默认情况下,Python 的代码执行顺序是按照从上到下的顺序,依次执行的。 编程是一件明确无歧义的事情,安排好任务的顺序,计算机才能够正确的进行执行。 二、条件语句 1、什么是条件语句 条件语句能够表达 “如果...&…

架构师机器学习操作 (MLOps) 指南

MLOps 是机器学习操作的缩写,是一组实践和工具,旨在满足工程师构建模型并将其投入生产的特定需求。一些组织从一些自主开发的工具开始,这些工具在每次实验后对数据集进行版本控制,并在每个训练周期后对检查点模型进行版本控制。另…

【qt】 QGridLayout布局管理器怎么用?

QGridLayout是 Qt 中的一个布局管理器,用于在窗口或对话框中创建网格布局。它将控件按照行和列的方式进行排列,使得界面更加整齐和有序。 可以用setSpacing()来设置各个主键之间的间距. 可以设置各组件之间的间隙和与窗口边界的边距. 用addWidget()来添…

AQS之ReentrantLock源码分析

目录 1. LockSupport 类 2. 如何设计一把独占锁? 3. 管程 — Java同步的设计思想 3.1 MESA模型 为什么条件队列的线程需要移到同步队列再唤醒运行? 4. AQS原理分析 4.1 什么是AQS 4.2 AQS核心结构 AQS内部维护属性volatile int state 4.3 AQS定义…

Android 10.0 SystemUI启动流程

1、手机开机后,Android系统首先会创建一个Zygote(核心进程)。 2、由Zygote启动SystemServer。 3、SystemServer会启动系统运行所需的众多核心服务和普通服务、以及一些应用及数据。例如:SystemUI 启动就是从 SystemServer 里启动的…

[web]-sql注入-白云搜索引擎

ctrlu查看源代码&#xff0c;发现前端有js过滤 <script>function myFunction(){var xdocument.getElementById("number").value;var adocument.getElementById("word").value;var ba.replace(/[\ |\~|\|\!|\|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\|\…

通过vm可以访问那些属性——06

1.通过vue实例都可以访问那些属性&#xff1f;&#xff08;通过vm都可以vm.什么&#xff09; vue实例中的属性很多。有的以$开始&#xff0c;有的以_开始。 所有以$开始的属性&#xff0c;可以看做是公开的属性&#xff0c;这些属性是提供给程序员使用的 所有以_开始的属性&…

Redis学习笔记(个人向)

Redis学习笔记(个人向) 1. 概述 是一个高性能的 key-value 数据库&#xff1b;其具有以下三个特点&#xff1a; Redis支持数据的持久化&#xff0c;可以将内存中的数据保存在磁盘中&#xff0c;重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据&…

《昇思25天学习打卡营第19天|生成式-Pix2Pix实现图像转换》

学习内容&#xff1a;Pix2Pix实现图像转换 1.模型简介 Pix2Pix是基于条件生成对抗网络&#xff08;cGAN, Condition Generative Adversarial Networks &#xff09;实现的一种深度学习图像转换模型&#xff0c;该模型是由Phillip Isola等作者在2017年CVPR上提出的&#xff0c…

【YOLO系列】快速部署YOLOv5(Windows)

引言 在计算机视觉领域&#xff0c;目标检测是至关重要的任务之一&#xff0c;它涉及识别图像或视频中的对象&#xff0c;并将其分类和定位。近年来&#xff0c;**YOLO&#xff08;You Only Look Once&#xff09;**算法因其速度与精度的平衡而变得非常流行。在这篇博文中&…

防火墙NAT智能选举综合实验

目录 实验拓扑 实验要求 实验思路 实验配置 需求7 需求8 需求9 需求10 需求11 实验拓扑 实验要求 7.办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 8.分公司设备可以通过总公司的移动链路和电信链路访问到d…

电表及销售统计Python应用及win程序

暑假每天都要填表算账很烦躁&#xff0c;就整了个小程序来减轻压力 程序可以做到记录输入的每一条数据&#xff0c;并用新数据减去旧数据算新增的量&#xff0c;同时记录填写时间 Python代码 import json import os # 导入os模块 from datetime import datetime from tkint…

yolov8预测

yoloV8 官方地址 预测 -Ultralytics YOLO 文档 1.图片预测 from ultralytics import YOLO #### 图片预测1 ### https://www.youtube.com/watch?vneBZ6huolkg ### https://github.com/ultralytics/ultralytics ### https://github.com/abdullahtarek/football_analysis…

细数「人力资源」的「六宗罪」

细数「人力资源」的「六宗罪」 不要让人力资源成为企业发展的障碍 人力资源的六宗罪: 招聘与配置培训与开发薪酬与绩效请您先「点赞」+「在看」+「收藏」+关注@netkiller,转发给你的朋友,再慢慢看,方便查看往期精彩文章,以防手划找不到,您的支持就是我最大的动力。 人力…

C++学习指南(一)——C++入门基础

欢迎来到繁星的CSDN&#xff0c;本期内容主要包括C第一个程序&#xff0c;命名空间&#xff0c;缺省参数&#xff0c;函数重载&#xff0c;引用、inline以及nullptr这些基础概念。 在进入正题之前&#xff0c;我需要先阐述一下。本系列涉及的内容为C部分&#xff0c;可以理解为…