【Java面向对象】java学习之旅17-接口

告别LM2596!用LM5175打造400W自动升降压数控电源(附完整电路图与代码) 本文详细介绍了如何利用LM5175芯片设计400W自动升降压数控电源,替代传统的LM2596方案。通过四开关Buck-Boost拓扑结构,LM5175实现了高达98%的转换效率和400W大功率输出,支持无缝升降压切换。文章涵盖芯片选型、电路设计、PCB布局及STM32数控实现,为工程师提供完整的实践指南。 阅读详情

定义:

表示一种能力或者规范

使用:

  1. 使用interface关键字声明接口
  2. 接口中可以声明常量、抽象方法、静态方法、默认实现的方法
  3. 用implements关键字实现接口
  4. 实现类中需要重写实现所有的抽象方法,也可以重写接口中默认实现的方法

一个简单的接口实例:

//接口的声明用interface,可以继承多个接口
public interface MyInterface extends MyFaterInterface, MyFaterInterface2 {

    //接口中可以定义的有:
	// 常量
	public static final String NAME = "阿文";
	
	// 默认使用public static final修饰
	int AGE = 18;
	
	// 静态方法 jdk1.8+
	public static void fun1() {
		System.out.println("fun1");
	}
	
	// 默认实现的方法 jdk1.8+
	public default void fun2() {
		System.out.println("fun2");
	}
	
	// 抽象方法
	public abstract void fun3();
	
	// 默认使用public abstract修饰
	void fun4();
}

接口中的抽象方法需要子类去实现:

/**
 * 接口实现类
 */
 //类可以实现多个接口
public class MySubClass implements MyInterface, MyInterface2 {

	@Override
	// 接口默认实现的方法,也可以重写
	public void fun2() {
		System.out.println("sub-fun2");
	}

	@Override
	public void fun3() {
		System.out.println("sub-fun3");
	}

	@Override
	public void fun4() {
		System.out.println("sub-fun4");
	}

}

注意事项:

  1. 实现类及其对象都无法调用接口的静态方法,只能通过接口名调用
  2. 实现类可以获得接口中所有静态常量
  3. jdk1.8+接口中的方法不只是抽象方法,还有静态方法和默认实现的方法
  4. 一个类可以实现多个接口,用逗号分隔
  5. 接口只能继承接口,多继承,使用逗号分隔
  6. 实现类需要实现接口中的所有抽象方法,否则该类是一个抽象类

我们在主类中测试一下:

    @Test
	public void test2() {
	    //通过实现类的子类调用自身重写后的方法
		MySubClass msc = new MySubClass();
		msc.fun3();
		msc.fun4();
		msc.fun2();
		
		//接口中的静态方法只能通过自身的接口名去调用
		MyInterface.fun1();
		//msc.fun1(); 实现类的对象无法调用接口的静态方法
		//MySubClass.fun1();
		
		//接口可以自己点出自身的静态常量
		System.out.println(MyInterface.NAME);
		System.out.println(MyInterface.AGE);
		
		//实现类可以获得接口中所有静态常量
		System.out.println(msc.NAME);
		System.out.println(msc.AGE);
		System.out.println(MySubClass.NAME);
		
	}

分类:

  1. 普通接口:可以有静态常量、抽象方法、静态方法、默认实现的方法
  2. 标识接口:接口内没有任何成员,标识一种能力(如Serializable标识该类可序列化)
  3. 函数式接口:接口中只能有一个抽象方法,便于函数式编程使用

上述所示的是一般普通的接口

标识接口

 /**
 * @author  unascribed
 * @see java.io.ObjectOutputStream
 * @see java.io.ObjectInputStream
 * @see java.io.ObjectOutput
 * @see java.io.ObjectInput
 * @see java.io.Externalizable
 * @since   JDK1.1
 */
 //这种所示的是标识性的接口,该接口类强调的是一种能力,具体的实现会在java虚拟机中进行
 public interface Serializable {
 }

函数式接口:

/**
 * 自定义函数式接口
 */
 //函数式接口的注解,规定函数式接口内只定义有一个抽象方法,可以有多个其他
 //的静态方法。
@FunctionalInterface
public interface MyFunInterface {
	
	double apply(double d);
	
}

/**
 * 自定义函数式接口的实现(传统的实现方式)
 */
public class MyFunInterfaceImpl implements MyFunInterface {

	@Override
	public double apply(double d) {
		return Math.round(d * 100) * 0.01;
	}
	
}

传统用法 vs 接口的内部实现 vs 函数式编程

    @Test
	public void test3() {
		//传统用法
		MyFunInterfaceImpl mfii = new MyFunInterfaceImpl();
		double result = mfii.apply(3.1415);
		System.out.println(result);
		
		//使用接口的内部实现优化(这里默认的是创建了一个接口的隐式对象,需要我们实现里面的方法才能创建该对象。)
		MyFunInterface mfi = new MyFunInterface() {
			@Override
			public double apply(double d) {
				return Math.round(d * 1000) * 0.001;
			}
		};
		System.out.println(mfi.apply(3.1415));
		
		//使用函数式编程优化
		MyFunInterface mfi1 = d -> {return Math.round(d * 1000) * 0.001;};
		System.out.println(mfi1.apply(3.1415));
	}
接口和抽象类的异同:

相同点:

1. 都不能实例化,但是可以内部实现(匿名内部类)。
2. 都可以包含抽象方法。
3. 子类或者实现类在继承或者实现抽象类或者方法的时候,必须重写实现所有的抽象方法,否则这个类还是抽象类。
4. 抽象类和接口都是引用数据类型,都可以作为父类引用指向子类对象,实现了多态。

不同点:

1. 子类只能继承一个抽象类,可以实现多个接口。
2. 抽象类只能继承一个抽象类,接口可以继承多个接口。
3. 抽象类可以声明变量、常量,接口中只能声明常量。
4. 抽象类的成员可以使用所有权限修饰符,接口中只能使用public。
5. 抽象类有构造方法,接口没有构造方法。
6. 抽象类可以有抽象方法和普通方法,接口只有抽象方法、静态方法、默认实现的方法。
7. 抽象类可以实现接口,接口无法继承抽象类。

总结:

接口类似于抽象类但是不同于抽象类,接口最主要是提供自己的抽象方法,让子类去实现,接口不允许被创建一个新的对象,这样就可以去通过子类创建对象去调用自己的方法了。

随机向量函数链神经网络(RVFLNN)简介——附测试代码 宽度学习(Broad Learning System)原理介绍:随机向量函数链神经网络(RVFLNN) 目录宽度学习(Broad Learning System)原理介绍:随机向量函数链神经网络(RVFLNN)结构分析和训练优化 函数链神经网络(Functional-link neural network,简称FLNN)的结构如下图。 和深度神经网络结构不同的是,FLNN相当于把隐层放到了输入层中,作为增强结点(Enhancement nodes)。也可以理解成FLNN在输入层就对输入向量进行了非线性变换 阅读详情

相关推荐

在 STM32CubeIDE 中针对 STM32F407 移植 ThreadX

在 STM32CubeIDE 中针对 STM32F407 移植 ThreadX,不依赖盗版破解的Keil MDK、IAR等软件。

wangyuewu08的博客 3374

Java学习之接口2(interface)

接口中的方法实现 上一篇中简单介绍了接口的概念以及定义格式。Java学习之接口1(interface) 接下来,将介绍各种方法的实现过程。 根据上一篇的介绍:类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类。实现的动作类似于继承抽象父类的方法,格式相仿,只是关键字不同,实现使用 implements 关键字。 格式如下: class 类名 implement...

屎山搬运工 786

Java实战:绿盾加密文件批量解密工具Ldterm的实现与优化

本文详细介绍了基于Java开发的绿盾加密文件批量解密工具Ldterm的实现与优化过程。通过分析绿盾加密机制,结合Java流处理能力,实现了高效的文件解密方案,并分享了多线程处理、内存优化等性能提升技巧,适用于企业级数据迁移与备份场景。

weixin_29314405的博客 488

【Java 接口】接口(Interface)的定义,implements关键字,接口实现方法案例

Java中的接口是一种特殊的抽象类,它只包含了方法的声明,而没有方法的实现。接口可以看作是一种规范或者契约,它规定了实现类必须实现哪些方法,但是并不关心这些方法的具体实现。public interface 接口名 {// 声明方法,不包含方法体 返回类型 方法名(参数列表);返回类型 方法名(参数列表);// ... }接口名可以由字母数字下划线组成,但是不能以数字开头;方法的声明和普通方法一样,只是没有方法体,直有方法签名接口的实现类必须实现接口中声明的所有方法, 否则会编译错误, 实现类使用。

云散的博客 1600

STM32 AFIO时钟开启时机与复用功能解析

在嵌入式系统开发中,GPIO复用是微控制器外设配置的核心技术之一。通过复用功能,单个物理引脚可以动态切换不同功能模式,如USART通信或普通IO。其实现原理依赖于芯片内部的时钟树架构和寄存器配置机制。AFIO(Alternate Function I/O)模块作为STM32的特色设计,专门处理引脚重映射、外部中断配置等高级功能。正确理解复用功能与AFIO时钟的关系,能显著提升嵌入式开发效率,避免资源浪费。本文以STM32为例,结合引脚重映射和USART配置等典型场景,详解AFIO时钟的实际应用规范与优化实践

weixin_42389113的博客 578

ndnSIM学习笔记(一)

在接下来的一段时间要用ndnSIM来做自己的仿真网络,需要系统的学习相关内容,以下为内容记录。1.安装      1.1核心依赖(必需的)             • python >= 2.6             • libsqlite3             • libcrypto++             • pkg-config             • Boost lib...

gaonjzzz的博客 2985

JAVA基础 面向对象下(2)(案例+总结+代码描述)

JAVA基础 面向对象(案例+总结+代码描述)

心态的博客 2817

workbench谐响应

定义材料 打开Engineering Data定义材料,在分析时不同部分选择不同材料 建模 打开Geometry建模,我举的例子很简单就一根光秃秃的轴 因为要加轴承,在轴上创建imprint face 因为要用point mass代替轴上原来的盘,在轴上盘的位置新建一个Plane,用Slice方法将轴从XYPlane3分成两段 施加边界条件以及谐响应分析 打开Model 1.在两段轴的交界面处,创建Point Mass,输入质量与转动惯量,位置在轴线上 2.mass point promote to.

my blogs include programming, math, physics.回首过去,放眼未来。 leslielee.blog.youkuaiyun.com 5881

设计一个接口Shape,包括2个抽象方法getPerimeter()和getArea()

设计一个接口Shape,包括2个抽象方法getPerimeter()和getArea(),分别是计算形状的周长和面积。设计实现该接口的具体类Rectangle、Triangle和Circle,分别表示矩形、三角形和圆,在三个子类中建立各自的构造方法并重写getPerimeter()和getArea()。在main()中声明Shape变量s,利用s输出某矩形、三角形和圆的周长和面积。

自强不息 厚德载物 2万+

Codex 命令行高效操作指南

本文详细介绍了Codex命令行工具的高效使用方法,包括安装配置、核心参数解析和实战技巧。通过`codex complete`、`codex explain`等指令,开发者可以快速生成代码、调试错误和重构项目,显著提升开发效率。特别推荐使用`--temperature`和`--max-tokens`参数优化生成结果。

weixin_29201313的博客 530

秋招突击——笔试整理——8/25——拼多多笔试整理

继续加油! 转变思维,有简单到复杂,由直观到抽象,这种贪心模拟的题目一直是这样的!

Blackoutdragon的博客 2400

idea如何快速同步实现接口类新增的方法

众所周知,接口类新增了一个新的方法以后,我们需要对这个接口类的所有实现类都进行方法重写,如果实现类非常多的话,手动一个个的修改就相当的让人恼火,idea中快捷键可以帮助我们解决这个烦恼: 首先在接口类中将我们的方法写好,然后点击Alt+Enter,选择implement method'xxxx' 然后Ctrl+a全选我们需要实现的类,回车搞定。 可以看到每个实现类都重写了该方法,接下来...

好了好了不要闹了! 5325

FT2004(D2000)开发实战之AMD R5 230显卡驱动适配

AMD R5 230显卡驱动适配

嵌入式Linux 3195

Java面向对象:接口的学习

本文介绍了Java中接口的基本语法, 什么是接口, java中的接口 语法规则, 接口的使用,接口的特性,如何实现多个接口,接口间的继承,以及抽象类和接口的区别

记录并分享学习编程时的知识点... 5984

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java学习之旅:从入门到进阶的系统总结

Spring MVC是Java EE中一个流行的框架,它基于Spring框架,提供了MVC设计模式的实现。Spring MVC通过注解和配置文件简化了Web开发,支持请求映射、数据绑定、视图解析等功能。Java是一门功能强大、应用广泛的编程语言,学习Java不仅可以掌握一门实用的编程技能,还可以深入了解面向对象编程、多线程编程、网络编程等重要概念。通过本文的系统总结,希望你对Java的学习有了更清晰的思路和方向。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 3647

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【Java面向对象学习】一张图搞定Java面向对象

刚开始学习Java的时候,一个人跌跌撞撞摸索着往前走,很多东西理解的也懵懵懂懂,后来实践的多了,才慢慢清楚;许多东西虽然很基础但是却很重要,是需要反复思考和加深理解的。【Java面向对象学习】一张图搞定Java面向对象,分享一些归纳总结后的技术干货,一张图能搞定的事,绝对不长篇大论。 大家都知道,Java面向对象是Java的一个核心,也是初学者的一个难点,所以我们从这里开始,Let’s go

monkey518的博客 4509

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java面向对象学习总结

抽象类(可以说是比父类抽象程度更高的父类,允许不写方法体)是不能被实例化(不能被new的)的类,通常用于定义一些通用的行为和属性,并要求子类提供具体的实现。抽象类可以包含抽象方法和非抽象方法。抽象类不能直接创建对象,只能通过子类实例化,且子类必须对父类的所有抽象方法进行重写。有抽象方法的类必须是抽象类,抽象类中不一定要有抽象方法,可以写具体方法。// 抽象方法void display() { // 非抽象方法@Override@Override// 输出: Drawing Circle。

m0_53999704的博客 1895

【Java】面向对象之——接口的理解

【Java】面向对象之——接口的理解语法规则实现多个接口接口使用实例接口间的继承Cloneable 接口和深拷贝总结 接口是抽象类的更进一步. 抽象类中还可以包含非抽象方法, 和字段. 而接口中包含的方法都是抽象方法, 字段只能包含静态常量. 有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果。 接口(interface)是抽象方法和常量值的定义的集合。 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义

DerrickWestbrook的博客 2387

Java17 面向对象(OOP)详解

本文系统介绍了Java面向对象编程(OOP)的核心知识点。主要内容包括:1)基础概念部分详细讲解了类与对象、封装、继承、多态三大特性,以及this/super关键字和接口与抽象类的使用;2)常用进阶部分涵盖构造器、方法重写/重载、访问修饰符、静态成员等关键语法;3)实战应用部分结合企业开发场景,讲解了设计原则、设计模式、代码规范和框架应用。文章强调OOP是Java编程的核心思想,通过清晰的代码示例和误区提示,帮助读者建立完整的OOP知识体系,掌握从基础语法到企业级开发的关键技能。

weixin_42505697的博客 1356

Java面向对象—接口

Java面向对象

JavaMrs的博客 1154

Java学习之旅第二季-17:密封类与密封接口

本小节介绍了Java 17引入的密封类和密封接口。密封类/接口通过 sealed 关键字限制继承范围,必须使用 permits 指定允许的子类/接口。子类必须用 final 、sealed 或 non-sealed 修饰。密封类/接口与子类需在同一模块或包中,适用于API开发以严格控制继承体系。该特性增强了Java对类继承的精确控制能力。

摸鱼的老谭 732

Java 面向对象:看我怎么把重写 + 重载 + 接口实战记录

本文核心:多态的 3 种实现方式各有侧重 —— 重写通过子类覆盖父类方法实现运行时多态,重载通过参数不同实现编译期多态,接口实现通过规范约束实现解耦多态。掌握三者的规则和适用场景,能大幅提升代码扩展性。扩展方向:1. 学习多态在设计模式中的应用(如工厂模式、策略模式);2. 研究 Java 17 密封类与多态的结合使用;3. 理解 JVM 动态绑定的底层实现(方法表、invokevirtual 指令)。

m0_67391377的博客 850

JAVA学习之面向对象

java面向对象的详细学习资料

2301_80073794的博客 1637

JAVA面向对象——接口

今天给大家讲讲接口。具体的看下面代码: /* JAVA面向对象——接口 一、 什么是接口: 这个我这里不做过多讲解,大家可以想一下日常生活中的USB接口 二、 接口的关键字: interface 和 implements 创建接口: interface 接口名{ ...

孤傲的兔子的博客 637

从源码中学习Java面向对象中继承、接口、抽象的设计

Apache Flink作为世界级的流处理框架,其源码设计堪称面向对象设计的经典范例。本文通过深入分析Flink的核心设计,揭示继承、接口、抽象类在大型项目中的最佳实践,帮助开发者理解如何在实际项目中应用面向对象的设计原则。

qq_43552242的博客 1048

从零学习Java之旅 Part2 面向对象部分

从零学习Java之旅 Part 面向对象部分 类和对象基本概念 对象:java程序运行的基本单位,类似于组成客观世界中个体 对象包含两方面的内容: 属性 用成员变量表示 行为 用成员方法表示 类:类是所有对象共性的抽象 属性:描述对象中有哪些属性(通过定义成员变量) 行为:描述对象有哪些行为,以及行为的具体表现(通过定义成员方法) 类和对象的关系:类是用来描述对象的(描述对象有哪些属性、描述对象有哪些行为)。 对象和对象的关系: 不同类的对象:具有不同的属性和行为 同种类型的对象:对象有相

Re0_M的博客 538
上一篇: 【Java面向对象】java学习之旅16-抽象类
下一篇: 【Java面向对象】java学习之旅18-lambda表达式
JeffHan^_^
博客等级 码龄7年 1万+粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值