【JavaEE重点知识归纳】第9节:抽象类和接口

目录

一:抽象类

1.概念

2.语法

3.特性

4.作用

二:接口

1.概念

2.语法

3.接口使用

4.特性

5.实现多个接口

6.接口间的继承

7.Comparable接口

8.Clonable接口

9.抽象类和接口的区别


一:抽象类

1.概念

(1)在面向对象的概念中,所有的对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描述对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类

(2)eg:

(3)Animal是动物类,每个动物都有自己的叫声,但是由于Animal不是一个具体的动物,bark()方法无法实现,因此,Animal可以设计为抽象类 

2.语法

(1)在Java中,一个类如果被abstract修饰称为抽象类,抽象类中被abstract修饰的方法称为抽象方法,抽象方法可以不用给出具体的实现体

(2)抽象类也是类,内部可以包括普通方法和属性,甚至构造方法

3.特性

(1)抽象类不允许直接实例化对象

(2)既然抽象类不允许实例化,那么要抽象类干嘛——就是为了继承(当一个普通类继承了这个抽象类的时候,需要重写这个抽象类所有的抽象方法)

(3) 抽象方法不能是private的,抽象方法不能被final和static修饰,因为抽象方法要被子类重写

(4)抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类

(5)抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量

4.作用

(1)抽象类本身不能被实例化,要想使用,只能在创建该抽象类的子类,然后让子类重写抽象类中的抽象方法

(2)抽象类存在的意义就是为了让编译器更好的校验,像Animal这样的的类我们并不会直接使用,而是使用它的子类,万一不小心创建了Animal的实例,编译器会及时提醒我们

二:接口

1.概念

(1)在现实生活中,接口的例子比比皆是,比如笔记本上的USB接口,电源插座

(2)在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型

2.语法

(1)接口关键字interface

public interface 接口名{

        //成员变量默认是public static final

        //成员方法默认是public abstract

        //一般情况下可以不写(阿里约定,保持代码简洁性)

}

(2)创建接口的时,接口命名一般以大写字母I开头;接口命名一般使用形容词性 

3.接口使用

(1)接口不能直接使用,必须要有一个“实现类”来“实现”该接口,实现接口中的所有抽象方法

public class 类名 implement 接口名{

}

(2)注意:子类和父类之间是extends继承关系,类和接口之间是implements实现关系

public interface USB {void openDevice();void closeDevice();
}//鼠标类,实现USB 接口
public class Mouse implements USB{@Overridepublic void openDevice() {System.out.println("打开鼠标");}@Overridepublic void closeDevice() {System.out.println("关闭鼠标");}public void click(){System.out.println("点击鼠标");}
}//键盘类,实现USB接口
public class KeyBoard implements USB{@Overridepublic void openDevice() {System.out.println("打开键盘");}@Overridepublic void closeDevice() {System.out.println("关闭键盘");}public void input(){System.out.println("键盘输入");}
}//笔记本类;使用USB接口
public class Computer {public void powerOn(){System.out.println("打开笔记本电脑");}public void powerOff(){System.out.println("关闭笔记本电脑");}public void useDevice(USB usb){usb.openDevice();if(usb instanceof Mouse){Mouse mouse=(Mouse)usb;mouse.click();}else if(usb instanceof KeyBoard){KeyBoard keyBoard=(KeyBoard) usb;keyBoard.input();}usb.closeDevice();}
}public class Test {public static void main(String[] args) {Computer computer=new Computer();computer.powerOn();computer.useDevice(new Mouse());computer.useDevice(new KeyBoard());computer.powerOff();}
}

4.特性

(1)接口类型是一种引用,但是不可以实例化,就是不能new

(2)接口中的每一个方法都是public修饰的抽象方法

(3)接口中的抽象方法不能在接口中实现,只能有实现接口的类来实现

(4)重写接口中的方法时,不能只用默认default权限,因为接口中的方法为public,不能分配更低的访问权限

(5)接口不能有静态代码块和构造方法

(6)接口不是类,但是接口编译后的字节码文件后缀格式还是.class

5.实现多个接口

(1)在Java中,不允许多继承,但是允许多接口

(2)一个类实现多个接口的时候,每个接口中的抽象方法都要实现,否则类必须设置为抽象类

(3)继承表示is-a的关系,组合表示has-a的关系,接口表示具有xxx特性

6.接口间的继承

(1)在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承

(2)接口可以继承一个或多个接口,达到复用的效果,使用extends关键字(接口之间的继承相当于把多个接口合并在一起 )

interface 接口1 extends 接口2,接口3{

}

7.Comparable接口

(1)给定一个学生对象数组,对这个数组中的元素进行排序(按分数降序)

(2)两个整数是可以直接比较的,大小关系明确,而两个学生对象的大小关系怎么确定?让Student类实现Comparable接口,并实现其中的comparaTo方法

(3)在sort方法中会自动调用comparaTo方法;comparaTo的参数是Object,其实传入的就是student类型的对象

import java.util.Arrays;public class Student implements Comparable{private String name;private int score;public Student(String name,int score){this.name=name;this.score=score;}@Overridepublic String toString() {return "["+this.name+":"+this.score+"]";}@Overridepublic int compareTo(Object o) {Student student=(Student)o;if(this.score> student.score){return -1;}else if(this.score< student.score){return 1;}else{return 0;}}
}
class Test{public static void main(String[] args) {Student[] students=new Student[]{new Student("张三",98),new Student("张四",78),new Student("张五",88),new Student("张六",90),};Arrays.sort(students);System.out.println(Arrays.toString(students));}
}

8.Clonable接口

(1)在Java中内置了一些很有用的接口,Clonable就是其中之一

(2)Object类中存在一个clone方法,调用这个方法可以创建一个对象的“拷贝",但是要想合法调用clone方法,必须要先实现Clonable接口,否则会报异常

(3)拷贝

9.抽象类和接口的区别

(1)核心区别:抽象类中可以包含普通变量和普通方法,这样的变量和方法可以被子类直接使用(不必重写),而接口中不能包含普通方法,子类必须重写所有的抽象方法

(2)

区别抽象类接口
结构组成普通类+抽象方法全局变量+抽象方法
权限各种权限public
关系一个抽象类可以实现若干个接口

接口不能继承抽象类,但是接口可以使用extends

继承多个接口

子类使用使用extends关键字继承抽象类使用implements关键字是实现接口
子类限制一个类只能继承一个抽象类一个子类可以实现多个接口

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

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

相关文章

iOS如何实现语音转文字功能?

1.项目中添加权限 Privacy - Speech Recognition Usage Description : 需要语音识别权限才能实现语音转文字功能 2.添加头文件 #import <AVFoundation/AVFoundation.h> #import<Speech/Speech.h> 3.实现语音转文字逻辑: 3.1 根据wav语音文件创建请求 SFSpeechU…

Java String类

字符串转义符号为 \ 常见的转义字符 转移字符对应的英文是 escape character , 转义字符串&#xff08; Escape Sequence &#xff09; 字母前面加上捺斜线 "" 来表示常见的那些不能显示的 ASCII 字符 . 称为转义字符 . 如 \0,\t,\n 等&#xff0c;就称为转 义字…

【【萌新的FPGA学习之快速回顾 水 水 】】

萌新的FPGA学习之快速回顾 水 水 上一条FPGA的更新在9 25 并且2个礼拜没写 verilog 了 正好 刷新一下记忆 FPGA CPU DSP 的对比 在数字电路发展多年以来&#xff0c;出现了 CPU、DSP 和 FPGA 三种经典器件&#xff0c;每个都是具有划时代意义的器件。CPU、DSP 和 FPGA 都有各…

QT 操作Windows系统服务

Windows服务是在Windows操作系统上运行的后台应用程序&#xff0c;它们在系统启动时自动启动&#xff0c;并在后台持续运行&#xff0c;不需要用户交互。Windows服务的作用包括但不限于以下几个方面&#xff1a;1. 提供系统功能&#xff1a;许多Windows服务提供了系统级的功能和…

大数据技术学习笔记(二)—— Hadoop运行环境的搭建

目录 1 模版虚拟机准备1.1 修改主机名1.2 修改hosts文件1.3 修改IP地址1.3.1 查看网络IP和网关1.3.2 修改IP地址 1.4 关闭防火墙1.5 创建普通用户1.6 创建所需目录1.7 卸载虚拟机自带的open JDK1.8 重启虚拟机 2 克隆虚拟机3 在hadoop101上安装JDK3.1 传输安装包并解压3.2 配置…

腾讯地图基本使用(撒点位,点位点击,弹框等...功能) 搭配Vue3

腾讯地图的基础注册账号 展示地图等基础功能在专栏的上一篇内容 大家有兴趣可以去看一看 今天说的是腾讯地图的在稍微一点的基础操作 话不多说 直接上代码 var marker ref(null) var map var center ref(null) // 地图初始化 const initMap () > {//定义地图中心点坐标…

不想加班的小伙伴们,请把这四个神器焊在电脑上~

今天又来给大家分享干货啦&#xff0c;如果你下载视频没渠道&#xff0c;写方案没灵感思路&#xff0c;做表格太慢&#xff0c;做海报太复杂&#xff0c;那你一点要看这一篇&#xff0c;今天分享的四个宝藏网站专门解决以上问题&#xff0c;一起来看看吧&#xff01; 一、WeDow…

SAP-QM-动态检验规则

Dynamic Modification Rule &#xff08;动态修改规则&#xff09; 1、决定样本大小的方式有3种&#xff1a; 手动输入比例大小采样过程 物料主数据质量视图 2、采样过程的创建方式有2种 跟批量大小有关系&#xff1a;百分比/AQL跟批量大小没有关系&#xff1a;固定值 而当…

【RNA biology】RNA的多功能性与早期生命进化

文章目录 RNARNA plays core functions in Central Dogma of BiologyrRNAsnRNA RNA worldReplication催化作用感知环境变化并作出响应 来自Manolis Kellis教授&#xff08;MIT计算生物学主任&#xff09;的课 油管链接&#xff1a;6.047/6.878 Lecture 7 - RNA folding, RNA wo…

概念解析 | 心脏电活动和机械活动之间的关系

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:心脏电活动和机械活动之间的关系。 心跳的交响乐:心脏电活动与机械活动之间的关联 一、背景介绍 心脏通过不断跳动将血液输送到我们身体的每一个角落。而这个跳动过程,是…

3D测量之圆孔测量 拟合圆 点云变换

0. 效果展示 1. 圆孔测量介绍 此文中的圆孔测量是一项3D视觉技术,旨在精确测量物体表面上的圆孔的直径和中心坐标。通过使用高精度3D相机(线激光轮廓仪或结构体等)采集原始点云数据,通过3D视觉算法能够快速、准确地分析物体上的圆孔特征,为制造和工程领域提供了强大的测量…

插入排序(学习笔记)

插入排序 每一轮插入排序后的结果与打扑克牌取牌原理相似&#xff0c;将取到的牌插入到合适的位置&#xff0c;但在程序实现方面还是基于交换的算法。 它的基本思想是将一个记录插入到已经排好序的有序表中&#xff0c;从而一个新的、记录数增1的有序表。 import java.util.…

【(数据结构)—— 基于单链表实现通讯录】

&#xff08;数据结构&#xff09;—— 基于单链表实现通讯录 一.通讯录的功能介绍1.基于单链表实现通讯录(1). 知识要求(2). 功能要求 二.通讯录的代码实现1.通讯录的底层结构(单链表)(1).思路展示(2).底层代码实现(单链表)1.单链表头文件 —— &#xff08;函数的定义&#x…

Hive安装配置 - 内嵌模式

文章目录 一、Hive运行模式二、安装配置内嵌模式Hive&#xff08;一&#xff09;下载hive安装包&#xff08;二&#xff09;上传hive安装包&#xff08;三&#xff09;解压缩hive安装包&#xff08;四&#xff09;配置hive环境变量&#xff08;五&#xff09;关联Hadoop&#x…

【超详细】CentOS 7安装MySQL 5.7【安装及密码配置、字符集配置、远程连接配置】

准备工作&#xff1a;CentOS 7系统&#xff0c;并确保可以联通网络 1、获取MySQL 5.7 Community Repository软件包 注意&#xff1a;这里使用的是root用户身份。 wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm2、安装软件包 rpm -ivh mysql5…

华为荣耀手机,开启开发者选项,hbuilder调试依然找不到

我的手机是华为荣耀50&#xff0c;其他华为手机不知道是不是这个问题哦 解决办法&#xff1a;usb配置&#xff0c;选择音频来源 然后就可以了

2020年江西省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书样题

2020年江西省职业院校技能大赛高职组 “信息安全管理与评估”赛项任务书 样题 赛项时间 9:00-12:00&#xff0c;共计3小时。 赛项信息 赛项内容 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 平台搭建与安全设备配置防护 任务1 网络平台搭建 9:00-12:00 1…

MS17010(永恒之蓝)漏洞实战

曾因苦难多壮志&#xff0c;不教红尘惑坚心。 工具检测 实战过程 使用搜索命令&#xff0c;搜索ms17_010 search ms17_010 搜索网段中主机漏洞 use auxiliary/scanner/smb/smb_ms17_010 照例&#xff0c;show options 看一下配置 设置网段&#xff0c;run运行就行了 使用攻…

浅谈云原生

目录 1. 云原生是什么&#xff1f; 2. 云原生四要素 2.1 微服务 2.2 容器化 2.3 DevOps 2.4 持续交付 3. 具体的云原生技术有哪些&#xff1f; 3.1 容器 (Containers) 3.2 微服务 (Microservices) 3.3 服务网格 (Service Meshes) 3.4 不可变基础设施 (Immutable Inf…

Debian衍生桌面项目SpiralLinux12.231001发布

导读SpiralLinux 是一个从 Debian 衍生出来的桌面项目&#xff0c;其重点是在所有主要桌面环境中实现简洁性和开箱即用的可用性。 spiral Linux 是为刚接触 Linux 世界的人们量身定制的发行版。这是 GeckoLinux 开发人员的创意&#xff0c;他更喜欢保持匿名。尽管他不愿透露姓…