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

QT---lineEdit相关信号

1.returnPressed信号 connect(ui.lineEdit_passWord, &QLineEdit::returnPressed, []() { // 输入密码回车后,调用校验密码接口ui.lineEdit_passWord->clearFocus(); //失去焦点on_param_confirmBtn_clicked();});2.输入后失去焦点才获取编辑框内新信息 参…

什么是人力资源管理审计

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

驱动电机液冷冷却系统

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

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

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

存算分离(Separation of Storage and Computation)

存算分离(Separation of Storage and Computation)是大数据处理中的一种架构设计原则。它的核心思想是将数据存储和数据处理分开,以提高系统的灵活性、可扩展性和性能。 在传统的数据处理系统中,数据通常存储在集中式的存储系统&a…

根据.h头文件中的方法声明,在 C/C++ 源文件中实现对应的函数

1、定义native函数: public class MathUtils {public native int add(int a, int b);public native int subtract(int a, int b);static {System.loadLibrary("MathUtils");} }2、生成头文件: 使用 javah 命令生成对应的 C 头文件 com_examp…

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

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

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

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

补码是什么意思_补码的性质_补码反码原码的转换

补码是计算机中用来表示有符号整数的一种编码方式。它主要用于解决在计算机中整数加减法运算时的方便性和统一性。   补码的定义:   正数的补码:正数的补码与其原码相同。   例如,十进制数 5 的二进制原码是 00000101,补码也…

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

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

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

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

金币程序题

昨天,小孩问了我一个python编程竞赛题,我看了一下题目,是一个数列编程的问题,我在想,小学五年级的学生能搞得懂吗?反正我家小孩是没有搞懂,不知道别人家的小孩能不能搞明白。所以我花了一点时间…

国道省道乡道见闻

在开始的时候,我看了下路线,发现在两个大道之间的路,有个是城区,我想着城区红绿灯多人多,便自作聪明的把路线改为到乡镇的,然后走下来感觉半斤八两吧,其中一段路是二车道,但是路两边…

1.Introduction to Spring Web MVC framework

Web MVC framework 文档:22. Web MVC framework (spring.io) 概述 Web MVC框架(Web Model-View-Controller Framework)是一种用于构建Web应用程序的软件架构模式。MVC模式将应用程序分为三个主要组件:模型(Model&am…

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类型的数据&…