【JAVA SE】抽象类和接口

✨✨欢迎大家来到Celia的博客✨✨

🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉

所属专栏:JAVA

个人主页:Celia's blog~

目录

 引言

一、抽象类

1.1 抽象类的定义

 1.2 抽象方法

 1.3 抽象类的特性

1.4 抽象类的使用

 1.5 抽象类的作用

二、接口(interface、implements)

2.1 接口的定义

2.2 接口的特性

2.3 接口的使用

三、抽象类和接口的区别


 

 引言

  在面向对象的概念中,类是用来详细描述一个对象的,但若是一个类没办法完全的描述一个对象的时候,我们通常会把这个类设置成抽象的,也就是抽象类。

一、抽象类

1.1 抽象类的定义

  声明一个抽象类:

abstract class Animal{
//关键字        类名}

我们用abstract关键字来声明一个抽象类,在这里有一些注意事项:

  1. 抽象类只能被继承,无法直接实例化对象。
  2. 抽象类中可以包含字段、方法、抽象方法 。
  3. 除以上外,抽象类的使用方法与其他类并无区别

 1.2 抽象方法

  抽象方法是没有具体实现过程的一个方法声明,由继承了抽象类的子类实现(方法重写)。现在我们在抽象类中声明一个抽象方法:

abstract class Animal{public abstract void eat();
// 修饰符   关键字                
}

 1.3 抽象类的特性

  • 如果一个抽象类中有抽象方法,一个子类继承了抽象类,如若不重新实现该抽象类中的抽象方法,该子类必须也是抽象的。
  • 如果普通类继承了抽象类,这个普通类必须实现该抽象类以及其子类的所有抽象方法。
  • 抽象类里可以没有抽象方法,但若是想要声明抽象方法,必须在抽象类里实现。
  • 抽象类中可以有构造方法,待到子类被实例化时,会调用父类(抽象类)的抽象方法。
  • 抽象方法不能被final、static修饰,原因是:final修饰的方法不能被重写、static修饰的方法依赖于类,不依赖于对象,故子类不可重写。

1.4 抽象类的使用

abstract class Animal{public String name;public int age;public Animal(String name, int age) { //抽象类的构造方法this.name = name;this.age = age;}public abstract void eat();//抽象方法
}class Cat extends Animal{public Cat(String name, int age) {//子类的构造方法super(name, age);//调用抽象类的构造方法}@Override    //重写抽象类中的抽象方法public void eat() {System.out.println("吃猫粮...");}
}

 1.5 抽象类的作用

  • 相比于继承普通类,抽象类被要求只能被继承,这样有利于我们描述一个对象。
  • 相比于重写普通的方法,抽象类多了一层编译检验,要求子类必须重写抽象方法,这样更利于我们的开发,更有有利于多态的实现。

二、接口(interface、implements)

  顾名思义,现实中的接口:如USB接口、TypeC接口、有线耳机接口...从这些例子中可以看出:接口是一个统一的规范。在Java中,接口就是多个类的一种统一规范。

2.1 接口的定义

interface Ieat{
//关键字  接口名
} 

接口的定义与类的定义类似,只是把class换成了interface。一般情况下,接口名以大写的I来开头。

2.2 接口的特性

  • 接口也是一种引用类型。
  • 接口与抽象类一样,不能直接实例化对象,只能由一个类来实现一个接口。
  • 接口中的成员变量默认由 public static final 修饰。
  • 接口中的方法默认由 public abstract 修饰,也就是抽象方法。(其他修饰符都会报错)。
  • 严格来讲,接口不属于类,但是接口编译后的字节码文件的后缀也是class。
  • 接口中的方法不能由接口实现,只能由实现了该接口的类来实现。
  • 一个类只能继承一个父类,但是可以实现多个接口,多个接口之间由逗号隔开。
  • 一个类实现多个接口时,每个接口的抽象方法都要实现,否则必须设置为抽象类。
  • 接口和接口之间可以实现多继承(extends),表示接口的扩展。

2.3 接口的使用

interface Ieat{            //定义一个接口public static final int a = 1;public abstract void eat();
}
abstract class Animal{public String name;public int age;public Animal(String name, int age) {this.name = name;this.age = age;}}class Cat extends Animal implements Ieat{  //继承了一个父类,实现了一个接口public Cat(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("吃猫粮...");    //重写接口中的方法,实现多态}
}

我们用 interface这个关键字来定义一个接口,使用implements关键字来让一个类实现一个接口。

三、抽象类和接口的区别

  • 抽象类可以包含普通方法和普通字段,普通方法和普通字段可以被子类直接使用,不必重写(想重写也可以,没有强制要求)。
  • 接口中的方法都是抽象方法,实现了该接口的类必须重写接口中所有的抽象方法。 
  • 接口中的成员变量都是由public static final修饰,属于类变量,依赖于类的加载而被加载。且不可被修改。

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

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

相关文章

大厂边缘组VS小厂核心组,要怎么选?

有问必答 最近有粉丝提问:大厂边缘组VS小厂核心组,怎么选? 这确实是个好问题,读者老爷们可以先问下自己:如果有一份月薪2W在大厂边缘组打螺丝的Offer且不加班,另外还有一份月薪2W5,在小厂核心…

华为坤灵管理型交换机S300,S500,S310,S210,S220,S200 web端开局配置

一. 准备线缆 笔记本或没有COM口的电脑,需准备转接线,并安装好随线光盘的驱动,检查设备管理器中COM口是否正常 2.连接电脑与交换机的CONSOLE口 二,准备软件putty。 Download PuTTY: latest release (0.81) 配置步骤如下: 开启HTTP服务。设置https://1…

【conda】解决conda activate无效的问题

conda activate 虚拟环境名字执行上述命令失效,提示如下信息: 经查询,原因是新版的 conda 不再使用 activate 来激活虚拟环境,而是改用: source activate 虚拟环境名退出虚拟环境还是: conda deactivate…

sqlite基本操作

简介 文章目录 简介1.数据库的安装2.数据库命令:API,创建表单代码 csprintf()getchar和scanf() 1.数据库的安装 sudo dpkg -i *.deb这个报错表明出现依赖问题 用这个命令后再试试sudo apt --fix-broken in…

计算机组成原理----浮点数的表示和运算

目录 一.浮点数的表示 1.浮点数的作用和基本原理 2.浮点数的规格化 3.浮点数的表示范围 二.IEEE 754标准 三.浮点数的加减运算 1.加减运算 2.强制类型转换 一.浮点数的表示 1.浮点数的作用和基本原理 定点数在字节数固定的情况下,能表示的数字是很有限的&…

输入15个整数,计算并输出15个整数的和,并输出其中最大值和最小值;

输入15个整数&#xff0c;计算并输出15个整数的和&#xff0c;并输出其中最大值和最小值&#xff1b; #include<stdio.h> int main() {int i0,s0,max,min,jg0,jp0,og0,omax; int a[15]{12,13,14,16,17,18,19,10,1,2,3,4,5,6,7}; maxa[0],mina[0]; for(i0,s0;i<15;i) …

BIT 2024 编译原理 Lab. 4 四代编译器实验说明和要求

实验四&#xff1a;四代编译器实验 一、实验要求 详细实验要求请参考文件《Lab4实验说明和要求.pdf》。 二、实验思路 1、与 lab3 的对比 如果你在 lab3 就已经像我一样单独写了个函数处理表达式&#xff0c;那么理论上&#xff0c;lab4 相比于 lab3&#xff0c;不过就是多…

ComfyUi安装OOTDiffusion插件的diffusers版本问题

OOTDiffusion换装 在github上有近5K的star了&#xff08;https://github.com/levihsu/OOTDiffusion&#xff09;。 diffusers版本问题 最新版是0.27.2&#xff0c;不能低于0.25&#xff0c;但是OOT换装需要0.24&#xff0c;否则会报错&#xff1a; ComfyUI\custom_nodes\Comf…

系统架构设计师【第14章】: 云原生架构设计理论与实践 (核心总结)

文章目录 14.1 云原生架构产生背景14.2 云原生架构内涵14.2.1 云原生架构定义14.2.2 云原生架构原则14.2.3 主要架构模式14.2.4 典型的云原生架构反模式 14.3 云原生架构相关技术14.3.1 容器技术14.3.2 云原生微服务14.3.3 无服务器技术14.3.4 服务网格 14.4 云原生…

HTML+CSS 文本动画卡片

效果演示 实现了一个图片叠加文本动画效果的卡片&#xff08;Card&#xff09;布局。当鼠标悬停在卡片上时&#xff0c;卡片上的图片会变为半透明&#xff0c;同时显示隐藏在图片上的文本内容&#xff0c;并且文本内容有一个从左到右的渐显动画效果&#xff0c;伴随着一个白色渐…

YOLOV10训练自己的数据集

*************************************************** 码字不易&#xff0c;收藏之余&#xff0c;别忘了给我点个赞吧&#xff01; *************************************************** Start YOLOV10训练自己的数据集 官方论文&#xff1a;https://arxiv.org/abs/2405…

使用busybox快速创建rootfs系统(硬件:atk-dl6y2c)

目录 概述 1 编译busybox 1.1 配置Makefile 1.2 需改参数 1.3 配置busybox 1.4 编译busybox 2 完善 rootfs下文件 2.1 rootfs 的“/lib”目录添加库文件 2.2 rootfs 的“usr/lib”目录添加库文件 2.3 创建其他目录 3 完善其他文件 3.1 完善etc/init.d/rcS 3.2 完善…

Golang | Leetcode Golang题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; func longestConsecutive(nums []int) int {numSet : map[int]bool{}for _, num : range nums {numSet[num] true}longestStreak : 0for num : range numSet {if !numSet[num-1] {currentNum : numcurrentStreak : 1for numSet[currentNum…

【CMake】CMake入门(五)打包安装程序 使用CMake管理库 打包调试版和发行版

本篇文章不是新手入门教学文章&#xff0c;主要是记录笔者个人的学习笔记 CMake入门&#xff08;五&#xff09; 一、打包二、使用CMake管理库三、打包调试版和发行版 一、打包 发布程序可以有多种形式&#xff0c;比如安装包、压缩包、源文件等。CMake也提供了打包程序cpack可…

金钱的认知,你如何理解呢?

金钱的认知 建立在金钱之上的爱情是纯真的爱&#xff0c;朋友关系也才够纯粹&#xff0c;才是单纯的世界&#xff0c;反之没了钱的条件爱情和友情的美好关系极易破碎&#xff0c;也极易反目成仇。 心若美好钱就美好&#xff0c;心有欲望狰狞钱就是只咬人的老虎&#xff0c;钱…

Linux 僵尸进程和孤儿进程

一.Z(zombie)-僵尸进程 1.僵死状态&#xff08;Zombies&#xff09;是一个比较特殊的状态。当进程退出并且父进程&#xff08;使用wait()系统调用后&#xff09;没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 2.僵死进程会以终止状态保持在进程表中&#xff0c;并且会…

Java17 --- SpringCloud之seate

目录 一、创建seata需要的mysql数据库表 二、修改seata的配置文件 三、启动nacos及seata 四、创建需要的数据库及表 一、创建seata需要的mysql数据库表 CREATE DATABASE seata;CREATE TABLE IF NOT EXISTS global_table(xid VARCHAR(128) NOT NULL,…

C++ | Leetcode C++题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int> num_set;for (const int& num : nums) {num_set.insert(num);}int longestStreak 0;for (const int& num : num_set) {…

隐马尔可夫链

1 马尔可夫链 马尔科夫链&#xff08;Markov Chain&#xff09;是一种数学模型&#xff0c;它描述了一系列可能事件的概率&#xff0c;其中每个事件的发生仅依赖于前一个事件的状态。这一特性称为“无记忆性”或“马尔可夫性质”。我将用一个简单的天气预测模型作为例子来解释马…

T-Pot多功能蜜罐实践@debian12@FreeBSD

T-Pot介绍 T-Pot是一个集所有功能于一身的、可选择分布式的多构架&#xff08;amd64&#xff0c;arm64&#xff09;蜜罐平台&#xff0c;支持20多个蜜罐和很多可视化选项&#xff0c;使用弹性堆栈、动画实时攻击地图和许多安全工具来进一步改善欺骗体验。GitHub - telekom-sec…