【java学习—九】接口 interface(5)

news2024/12/16 19:04:58

文章目录

  • 1. 相关概念
  • 2. 接口的特点
  • 3. 应用举例
    • 3.1. 特点:接口中的成员变量和方法的默认修饰
    • 3.2. 特点:一个类可以实现多个无关的接口
    • 3.3. 特点:接口可以继承接口
    • 3.4. 特点:实现接口的类中必须提供接口中所有方法的具体实现内容,方可实例化。
    • 3.5. 特点:语法格式要先写 extends ,后写 implements
  • 4. 接口和抽象类的区别


1. 相关概念

为什么要有接口?

    有时必须从几个类中派生出一个子类,继承它们所有的属性和方法。但是, Java 不支持多重继承。有了接口,就可以得到多重继承的效果。

接口的定义:
(1)接口 (interface) 是抽象方法和常量值的定义的集合。
(2)从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
(3)一个类可以实现多个接口,接口也可以继承其它接口。
实现接口类:

class SubClass implements InterfaceA{ }

2. 接口的特点

(1)用 interface 来定义。
(2)接口中的所有成员变量都默认是由 public static final 修饰的。
(3)接口中的所有方法都默认是由 public abstract 修饰的。
(4)一个类可以实现多个无关的接口
(5)接口没有构造器。
(6)接口采用多层继承机制。
(7)实现接口的类中必须提供接口中所有方法的具体实现内容,方可实例化。否则,仍为抽象类
(8)接口的主要用途就是被实现类实现。(面向接口编程)
(9)与继承关系类似,接口与实现类之间存在多态性
(10)定义 Java 类的语法格式:先写 extends ,后写 implements

3. 应用举例

3.1. 特点:接口中的成员变量和方法的默认修饰

对应特点(2)(3):
(2)接口中的所有成员变量都默认是由 public static final 修饰的。
(3)接口中的所有方法都默认是由 public abstract 修饰的。

接口定义举例:

public interface Runner {
	int ID = 1;
	void start();
	public void run();
	void stop();
}

因为接口中的所有成员变量都默认是由 public static final 修饰的,上面代码相当于:

public interface Runner {
	public static final int ID = 1;
	public abstract void start();
	public abstract void run();
	public abstract void stop();
}

3.2. 特点:一个类可以实现多个无关的接口

对应特点(4):
(4)一个类可以实现多个无关的接口
举例:

TestIn接口:

package day09;

public interface TestIn {
	int ID = 1;//等同public static final int ID = 1;
	
	void test();//等同public abstract void test();
}

TestIn1接口:

package day09;

public interface TestIn1 {
	void test1();
}

实现接口:类实现多个接口

package day09;
/**
 * 子类继承父类,只能继承一个父类
 * 类可以'实现'多个接口,(用','分隔)
 * @author 14532
 *
 */
public class TestImpl implements TestIn, TestIn1 {//实现两个接口
	@Override
	public void test() {
		
	}
	
	@Override
	public void test1() {
		
	}
}

3.3. 特点:接口可以继承接口

对应特点(6):
(6)接口采用多层继承机制。
如2.2中的例子:

package day09;

public interface TestIn2 extends TestIn1 {//接口可以继承接口
	
}

3.4. 特点:实现接口的类中必须提供接口中所有方法的具体实现内容,方可实例化。

对应特点(7):
(7)实现接口的类中必须提供接口中所有方法的具体实现内容,方可实例化。否则,仍为抽象类

在这里插入图片描述
上图所示就没有提供接口中所有方法的具体实现内容,所以会报错,修改方法:将其改成抽象类。如下

package day09;
/**
 * 如果类没有实现接口所有方法,这个类就要定义抽象类
 * @author 14532
 *
 */
public abstract class TestImpl1 implements TestIn {

}

3.5. 特点:语法格式要先写 extends ,后写 implements

对应特点(10):
(10)定义 Java 类的语法格式:先写 extends ,后写 implements

package day09;
/**
 * 如果一个类既继承父类,又实现接口
 * 那么先继承,再实现
 * @author 14532
 *
 */
public class TestImpl2 extends Person implements TestIn, TestIn1{
	@Override
	public void test() {//Person中有Test()方法

	}
	@Override
	public void test1() {
		
	}
	
}

4. 接口和抽象类的区别

问题:接口和抽象类很相似,好像接口能做的事 用抽象类也能做,干嘛还要用接口呢?
    
假设:人类是由猴子进化来的,假如要是穿越回到过去,改变了猴子(猴子多出一只眼睛),对现在的人类会造成什么影响?
    从这个假设上可以看出,父类需要是稳定的抽象类,如果父类经常在变化,那么基于这个父类的子类、子类的子类,…,这些子类都要受到影响。
    但有时我们又需要给父类增加一些方法,那么就不能直接在父类上下手,只能新建一个接口,在接口上扩展方法,其他需要这些方法的子类自行去实现接口。

在这里插入图片描述

举例:
在这里插入图片描述
解决方法:
在这里插入图片描述
代码实现:
Person抽象类:

package day09;

public abstract class Person1 {
	int age;
	String name;
	int sex;
	
	public abstract void showInfo();
}

Cooking接口:

package day09;
/**
 * 厨艺的接口
 * @author 14532
 *
 */
public interface Cooking {
	void fry();//炒菜
}

Sing接口:

package day09;
/**
 * 歌唱的接口
 * @author 14532
 *
 */
public interface Sing {
	void singing();//歌唱
}

SCTeacher类:

package day09;
/**
 * 描述会唱歌的厨子是一个老师的类
 * @author 14532
 *
 */
public class SCTeacher extends Person1 implements Cooking,Sing{
	String course;//教的科目
	
	public void setInfo() {
		super.age = 27;
		super.name = "张三";
		super.sex = 1;
		
		this.course = "数学";
	}
	
	@Override
	public void showInfo() {
		System.out.println("会唱歌的厨子的老师的信息是:");
		System.out.println(super.age);
		System.out.println(super.name);
		System.out.println(super.sex);
		System.out.println(this.course);
		
	}
	
	@Override
	public void fry() {
		System.out.println(super.name + "老师拿手的厨艺是炒菜");
		
	}
	
	@Override
	public void singing() {
		System.out.println(super.name + "老师擅长美声唱法");
		
	}

}

Test.java:

package day09;

public class Test {
	public static void main(String[] args) {

		SCTeacher sct = new SCTeacher();
		sct.setInfo();
		sct.showInfo();
		sct.fry();
		sct.singing();
	}
	
}

运行结果:
在这里插入图片描述

(9)与继承关系类似,接口与实现类之间存在多态性

修改上面Test.java:

package day09;

public class Test {
	public static void main(String[] args) {

		Cooking c = new SCTeacher();
		c.fry();
		
		Sing s = new SCTeacher();
		s.singing();
		
	}
}

在这里插入图片描述

运行结果:
在这里插入图片描述

总结:
    抽象类是对于一类事物的高度抽象,其中既有属性也有方法。接口是对方法的抽象,也就是对一系列动作的抽象。
    当需要一类事物对一类事物抽象的时候,应该是使用抽象类,好形成一个父类;当需要对一系列动作抽象,就使用接口,需要使用这些动作的类就去’实现’相应的接口即可。

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

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

相关文章

2核4G服务器5M带宽?选腾讯云轻量应用服务器吧

2核4G服务器5M带宽?选腾讯云轻量应用服务器吧,因为划算,价格便宜!2023腾讯云双11优惠活动:轻量2核4G5M服务器166.6元/年,3年566.6元,50GB SSD云硬盘,300GB月流量,值得买的…

结构伪类选择器

伪类选择器:用来描述一个元素的特殊状态!比如第一个元素、某个元素的子元素、鼠标点击的元素 1 first-child/last-child /*ul的第一个子元素*/ ul li:first-child{ background: #0f35ad; } /*ul的最后一个子元素*/ ul li:last-child{ background: #0f3…

Java多线程篇(12)——ForkJoinPool

文章目录 1、基本原理2、源码2.1、sumbit干了啥?2.2、工作线程如何运行?怎么窃取?2.3、fork干了啥?2.4、join干了啥? 1、基本原理 假设有大量的CPU密集型计算任务,比如计算1-100的总和,普通的写…

两天写一个电影资讯速览微信小程序(附源码)

简介 基于原生小程序精仿的猫眼电影,仅供学习和参考。 首页效果图 数据请求 url: https://m.maoyan.com/ajax/movieOnInfoList?token,success(res) {const movieList0 _this.formatImgUrl(res.data.movieList)wx.hideLoading()_this.setData({movieIds0: res.…

虚幻中的网络概述一

前置:在学习完turbo强大佬的多人fps之后发觉自己在虚幻网络方面还有许多基础知识不太清楚,结合安宁Ken大佬与虚幻官方文档进行补足。 补充:官方文档中的描述挺好的,自己只算是搬运和将两者结合加强理解。 学习虚幻中的网络先从虚…

基于标签的协同过滤推荐方法研究

[摘要] 2.2标签相似度矩阵 惩罚jaccard相关热度系数

Q4已来,DAO发新生|CyberDAO子DAO种子会议

Q4已来,DAO发新生|CyberDAO子DAO种子会议,2023年10月25日在成都五星级希顿国际酒店隆重召开,本次会议百名DAO精英成员及CyberDAO大中华区运营团队合伙人JR、漫威、安祈出席!以蓄势和重塑为主题带领大家乘势而上,创新引…

控制系统典型应用车型 —— 牵引式移动机器人

牵引式移动机器人(AGV/AMR),通常由一个牵引车和一个或多个被牵引的车辆组成。牵引车是机器人的核心部分,它具有自主导航和定位功能,可以根据预先设定的路径或地标进行导航,并通过传感器和视觉系统感知周围环…

提高数据研究效率,优化成果分享及复用|ModelWhale 版本更新

秋高气爽、金桂飘香,十月末,我们又迎来了 ModelWhale 新一轮的版本更新。 本次更新中,ModelWhale 主要进行了以下功能迭代: 新增 添加模型服务到知识库(专业版✓ 团队版✓) 新增 自动生成数据引用信息&am…

MES管理系统解决方案实现生产信息全程追溯

生产制造企业在生产过程中,最令人头疼的问题之一就是产品信息的追溯。当产品出现质量问题时,需要在庞大的数据中寻找出问题批次的产品和同批次的物料,并进行召回处理,这样的工作量十分巨大。为了解决这一问题,许多企业…

Yolov5原理详细解析!一文看懂

引言 Yolo(You Only Look Once)是一种one-stage目标检测算法,即仅需要 “看” 一次就可以识别出图片中物体的class类别和边界框。Yolov5是由Alexey Bochkovskiy等人在YOLO系列算法的基础上进行改进和优化而开发的,使其性能与精度都得到了极大的提升。 Yolov5推出了Yolov5s、…

华为OD机考算法题:计算最大乘积

题目部分 题目计算最大乘积难度易题目说明给定一个元素类型为小写字符串的数组&#xff0c;请计算两个没有相同字符的元素长度乘积的最大值。 如果没有符合条件的两个元素&#xff0c;返回 0。输入描述输入为一个半角逗号分隔的小写字符串的数组&#xff0c;2< 数组长度<…

Painter:使用视觉提示来引导网络推理

文章目录 1. 论文2. 示意图3. 主要贡献4. 代码简化 1. 论文 paper:Images Speak in Images: A Generalist Painter for In-Context Visual Learning github:https://github.com/baaivision/Painter 2. 示意图 3. 主要贡献 在 In-context Learning 中&#xff0c;作为自然语言…

【2018统考真题】给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高 效的算法,找出数组中未出现的最小正整数。

【2018统考真题】给定一个含n(n≥1&#xff09;个整数的数组&#xff0c;请设计一个在时间上尽可能高 效的算法,找出数组中未出现的最小正整数。例如,数组{-5,3,2,3}中未出现的最小正 整数是1;数组{1,2,3}中未出现的最小正整数是4。 代码思路&#xff1a; 题目让你找未出现的最…

2024年北京/上海/广州/深圳PMP®项目管理认证精品班招生简章

PMP认证是Project Management Institute在全球范围内推出的针对评价个人项目管理知识能力的资格认证体系。国内众多企业已把PMP认证定为项目经理人必须取得的重要资质。 【PMP认证收益】 1、能力的提升&#xff08;领导力&#xff0c;执行力&#xff0c;创新能力&#xff0c…

国产 2443A 峰值功率分析仪

2443A 峰值功率分析仪 频率范围覆盖&#xff1a;9kHz至67GHz 产品综述 2443A峰值功率分析仪由峰值功率分析仪主机和系列化峰值功率探头组成&#xff0c;可用于测量和分析微波毫米波脉冲调制信号的多种幅度和时间参数&#xff0c;是表征脉冲调制信号特性的综合性测量与分析仪器。…

【2024秋招】2023-9-16 贝壳后端开发二面

1 自我介绍 2 秒杀系统 2.1 超卖怎么解决 3 redis 3.1 过期策略 3.2 过期算法 4 kafka 4.1 说一说你对kafka的了解 4.2 如何保证事务性消息 4.3 如何保证消息不丢失 4.4 消息队列的两种通信方式 点对点模式 如上图所示&#xff0c;点对点模式通常是基于拉取或者轮询…

Docker实战之一

一、前言 前两天看到一篇文章 再见了 Docker&#xff01;K8S 已成气候&#xff01;&#xff0c;K8S这么高端我们是还没有玩过的&#xff0c;Docker倒是实践过一把&#xff0c;这个系列会简单介绍一下实战的过程&#xff0c;具体背景是因为我们有时需要给门店提供一个相对稳定…

如何在IDEA中配置指定JDK版本?轻松解决!!!

有时候我们在导入项目&#xff0c;如果手动在IDEA中指定jdk版本&#xff0c;往往启动项目会报错误。 因此当我们新引入项目启动不了时可以检查一下自己IDEA中的jdk版本是否正确。 下面以配置jdk版本为11显示步骤&#xff1a; 1、配置 Project Structure 1.1、通过快捷键&qu…

阶乘与双阶乘的相关性质

阶乘与双阶乘的相关性质 双阶乘 基本性质 积分恒等式 极限近似 级数展开 阶乘 斯特林(Stirling)公式 gamma函数