Java抽象类和接口

news2025/7/19 6:23:14

对于Java面向对象编程来说,抽象也是它的一个重要特征。在 Java 中,可以通过两种形式来体现 面向对象(OOP)的抽象:接口和抽象类。这篇文章就为大家介绍这两个的相似与区别之处。

一、抽象类(abstract)

1.抽象方法

在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:

abstract void fun();

抽象方法必须用 abstract 关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用 abstract 关键字修饰。

2.抽象类:

抽象类的声明格式:

[public] abstract class ClassName {
    abstract void fun();
}

对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为 abstract 方法,此时这个类也就成为 abstract 类了。

3.抽象类和抽象方法之间的关系:

(1)有抽象方法的类,一定是抽象类;抽象类不一定有抽象方法。
(2)当子类继承抽象类时,必须要将抽象类中的抽象方法全部实现(或者称为重写),否则子类依然是抽象类。
(3)因为子类是继承父类全部内容,所以也就相当于子类中也有了抽象方法,通过重写,可以将抽象方法覆盖。

4.抽象类的特点:

(1)抽象类中可以有抽象方法,也可以没有抽象方法
(2)抽象类中可以有普通方法,也可以没有普通方法
(3)抽象类不能实例化(不能通过new来创建对象)
(4)没有抽象构造方法,也没有抽象静态方法

示例:

public abstract class A {
	
	public abstract void testA();

}

二、接口(interface)

1.接口的概念:

接口,英文称作 interface,在软件工程中,接口泛指供别人调用的方法或者函数。接口是常量和抽象方法的集合。接口的声明格式:

public interface InterfaceName {
     
}

接口中可以含有变量方法。

2.接口的实现

接口的实现需要通过implements关键字,一个实现类可以实现多个接口,多个接口使用逗号隔开,声明格式如下:

class ClassName implements Interface1,Interface2,[....]{
}

注意:一个类实现某一个接口,在这个类中,要重写接口中的所有方法,如果不重写,那么这个类要声明为抽象类。

3.接口的特点:

(1)接口是一个特殊的抽象类,也不能实例化
(2)接口中的方法都是抽象方法,默认访问修饰 public abstract
(3)一个类实现某一个接口,在这个类中,要重写接口中的所有方法,如果不重写,那么这个类要声明为抽象类
(4)接口中的变量都是静态常量,默认修饰符为 public static final
(5)无构造方法

4.使用原则:

(1)接口做系统与外界交互的窗口 :接口提供服务

(2)接口本身一旦制定,就不允许随意修改

三、抽象类和接口的异同

1.相同点:

(1)代表系统的抽象层

(2)都不能被实例化

(3)都能包含抽象方法

(4)用于描述系统提供的服务,不必提供具体实现

2.不同点 :

(1)在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法

(2)抽象类便于复用,接口便于代码维护

(3)一个类只能继承一个直接的父类,但可以实现多个接口

四、案例:防盗门

 一个类只能有一个直接父类,防盗门只能继承门或者继承锁,如何实现防盗门即有门的功能又有锁的功能,这时候就可以用到接口。

主类:Door类

public abstract class Door{
	//开门
	public abstract void openDoor();
	
	//关门
	public abstract void closeDoor();

}

接口:Lock

public interface Lock {
	
	
	// 开锁
	 void openLock();

	// 上锁
	public abstract void closeLock();
	

}

子类:FangDaoDoor类

public class FangDaoDoor extends Door implements Lock  {

	@Override
	public void openDoor() {
		System.out.println("轻轻一推,门开了");
		
	}

	@Override
	public void closeDoor() {
		System.out.println("轻轻一拉,门关了");
		
	}

	@Override
	public void openLock() {
		System.out.println("插入钥匙,左转三圈,锁开了");
		
	}

	@Override
	public void closeLock() {
		System.out.println("插入钥匙,右转三圈,上锁了");
		
	}


}

测试类:Test类

public class Test {

	public static void main(String[] args) {
		FangDaoDoor fdd = new FangDaoDoor();
		
		fdd.closeDoor();
		fdd.closeLock();
		System.out.println("出去玩了2个小时,回家");
		fdd.openLock();
		fdd.openDoor();

	}

}

结果:


                

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

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

相关文章

3.4 这些都是小红书的流量入口【玩赚小红书】

主要有下面这些位置: ​ 1、推荐流量:根据用户往期的搜索习惯推荐,相当于是猜用户喜欢,精准度会低一些 ​ 2、位置流量:根据用户所在的位置推荐,一般是同城20km范围内。直接在主页-发现-后边的附近那里可…

报告解读下载 | 11月《中国数据库行业分析报告》发布,精彩抢先看

为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》,持续传播数据技术知识、努力促进技术创新与行业生…

数位dp总结

补题的时候有个题需要数位dp,有去重学了一波上一年就学过的数位dp,又学一遍感觉上一年学了个寂寞,,, 这种问题大多数都是和数的每一位的数字有关,一般是一个数的数位之间存在着某种关系,让求具有…

网络通信基本原理

通讯的必要条件 主机之间需要有传输介质。光纤、蓝牙、wify主机上必须有网卡设备。把二进制信息转为高低电压的过程就是数据的调制过程。把电信号转为二进制信息的过程为解调制。主机之间需要协商网络速率。 网路的通讯方式 日常生活中,我们通讯的方式不可能只有…

IPD流程概要

一、IPD流程的主要内容 CDCP:concept decision check point 的缩写,意为概念决策评审点。在概念阶段结束时要召开一个概率决策评审会,在这个会议上,PDT正式向IPMT报告初始的业务计划,由IPMT决定项目是继续还是终止。若初始的业务计划得到批准,分委会将做出下一阶段开始前…

11.14-11.21

1.线性蒙皮 1.1 线性蒙皮定义 线性蒙皮:是由一系列骨骼驱动的。每个顶点会根据顶点权重图和相应的骨骼关联。根据骨骼在当前位置相对于静止位置的变换矩阵以及此顶点相对于该骨骼的权重,我们可以计算出该顶点在该骨骼影响下的位置。 假设Wij是第j个骨…

【数据可视化】第三章——数据可视化综合实践

Matplotlib作业数据.csv文件查看百度网盘:链接:https://pan.baidu.com/s/1oFB_KwhiJNlJAgXg7RaYuw?pwdabcd 提取码:abcd 1.作业描述 作业:根据Matplotlib作业数据.csv做出4种不同类型的组合图像 要求:根据情况适当添…

深入浅出基于HLS流媒体协议视频加密的解决方案

一套简单的基于HLS流媒体协议,使用video.js NodeJS FFmpeg等相关技术实现的m3u8tsaes128视频加密及播放的解决方案示例。 项目简介 起初是为了将工作中已有的基于Flash的视频播放器替换为不依赖Flash的HTML5视频播放器,主要使用了现有的video.js开源播…

Windows内核--HAL在抽象什么?(3.4)

From: HAL在Kernel和硬件之间 HAL在抽象什么? HAL位于内核最底层。“与硬件直接打交道“的这一层被称为硬件抽象层。顾名思义,Windows内核希望把硬件相关的代码放在HAL模块,而这似乎与WRK众多amd64或x86目录相违背。 注意,任何代…

如何优雅的终止线程 Java

目录 终止线程的方法 打断sleep函数 打断正常执行的线程 两阶段终止模式 错误的方法 使用线程对象的 stop() 方法停止线程 使用 System.exit(int) 方法停止线程 正确的方法:使用 interrrupt 终止线程的方法 XXXThread.interrupt(); 在线程的 run函数中对该线…

NFT+体育,卡塔尔世界杯有哪些NFT看点!

有人说没有冷门的世界杯不是真正的世界杯!11月22日,卡塔尔世界杯小组赛C组第1轮比赛中,沙特爆冷2:1逆转阿根廷队,成了今年世界杯的第一个冷门。世界排名第51位的沙特队战胜了排名第3的阿根廷队,结束了阿根廷队此前的36…

vue拖拽删除实现

拖拽删除 背景 自营上传图片,但是需要排序和删除功能,所以用到了h5的拖拽 源元素: 即被拖拽的元素。 目标元素: 即合法的可释放元素。 每个事件的事件主体都是两者之一。 拖拽事件 触发顺序及次数 被拖拽元素,事…

day5-day6【代码随想录】螺旋矩阵II

文章目录前言一、螺旋矩阵||(力扣59)二、螺旋矩阵(力扣54)前言 坚持循环不变量原则。 模拟顺时针画矩阵的过程: 填充上行从左到右 填充右列从上到下 填充下行从右到左 填充左列从下到上 由外向内一圈一圈这么画下去 一、螺旋矩阵…

大三保研夏令营须知及前期准备工作

前言 对于大三保研学生而言,学期将近结束;接踵而来的是接下来的保研准备。保研阶段通常可以分为:夏令营、预推免、九推(捡漏)。很多同学往往都是在前两个阶段就能获得满意的offer。 对于计算机专业来说,经历过2022年的“推免季”&…

项目实战——匹配系统(下)

目录 一、整体梳理 二、创建SpringCloud目录 三、创建子项目 四、实现接口 五、config网关配置 六、放行API 七、封装后端逻辑 八、对接匹配系统 九、修改数据库 十、实现匹配之后的逻辑 十一、线程锁 十二、匹配函数 上节课知识梳理: 用户浏览器打开之…

天津专升本报名时的报名点

2023年天津专升本报名区县及应届生、往届生报名点 天津市在校大三应届生报名点选自己的专科院校,往届生及在外省就读的应届生选户籍所在区招办。 退役士兵从天津入伍的选择学校作为报名点,外省市入伍的选择区招办。

slambook2(ch2)—— Ubuntu20.04 使用cmake + make自动化编译过程

slambook2(ch2)—— Ubuntu20.04 使用cmake make自动化编译过程主函数库函数libhello.cpplibhello.hCMakeLists.txt编译重新编译vim加行号主函数 main.cpp 库函数 libhello.cpp libhello.h CMakeLists.txt 编译 mkdir build && cd build c…

ASEMI肖特基二极管MBR30100CT特征,MBR30100CT应用

编辑-Z ASEMI肖特基二极管MBR30100CT参数: 型号:MBR30100CT 最大重复峰值反向电压(VRRM):100V 最大平均正向整流输出电流(IF):30A 峰值正向浪涌电流(IFSM&#xff0…

通达信l1l2行情接口-十档行情有哪些优势?

据提供系统或用户编制的条件选股公式进行选股选定一个条件选股公式或多个组合条件后,计算机自动帮您选出当时或历史上某一段时间内满足条件的所有股票十档行情 英文,列在行情下载显示窗口,同时可保留成板块。 那通达信l1l2行情接口-十档行情…

map容器(20221125)

一、map/multimap容器 1、map基本概念 map中所有元素都是pair; pair第一个元素为key(键值),起到索引的作用,第二个元素为value(实值); 所有元素会根据元素的键值(key)自动排序。 map/multi…