【JavaSE系列】第十节 —— 带你吃透抽象类

news2024/11/26 5:03:39

(6)当一个抽象类 继承一个抽象类的时候,可以不用来重写 当作父类的那个抽象类的抽象方法:提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、抽象类的概念

二、抽象类的语法

 三、抽象类的特性

四、抽象类的理解

五、总结一下抽象类所需要的注意点 

总结


前言

今天我们将进入到Java中有关抽象类的概念,抽象类是属于类的一种,在Java中有着非常重要的作用,今天就让我们通过一篇文章走进抽象类的时间;

一、抽象类的概念

在面向对象的概念中,所有的对象都是通过 类 来描绘的;

但是,并不是所有的类 都是用来描述对象的;

概 念 :  如果一个类中 没有包含足够的信息 来描绘一个具体的对象,那么 这样的类 我们就把它叫做 抽象类。   

 比如:

二、抽象类的语法

在Java中, 一个类如果被 关键字abstract 修饰,则称这个类为 抽象类

抽象类中 被 abstract 修饰的方法称为 抽象方法抽象方法不需要给出具体的方法体;

代码语法:

//Shape类 称为抽象类
abstract class Shape {
    
    public abstract void draw();    //draw方法 称为抽象方法
    
}

【注意】抽象类也是类,里面可以包含 成员变量和成员方法,甚至构造方法。

 

 三、抽象类的特性

(1)抽象类 不能实例化对象(指的是不能实例化自己的对象)

解释:

这个很容易理解:因为从抽象类的概念 我们可以得知,抽象类 不可以完整的描述 一个对象;那么当然不可以实例化对象了。

                                                                                                                                                  

如果实例化的不是自己的对象,那么可以去实例化(不可以实例化张三的对象,关于我李四什么事......):

(2)abstract修饰的 抽象方法 不能被final修饰,因为被abstract修饰的方法必须要重写,被final和static修饰的方法必须不能重写;当然,final也不可以修饰抽象类;它们是天敌,咋可能出现在一起嘛:

(3)抽象方法不可以被static修饰 (这个是重写的规则):

(4)抽象方法是不可以用private修饰的

【注意】如果抽象方法没有加 访问修饰限定符时,默认是public。

(5)抽象类当中不一定有抽象方法,但是如果这个方法是抽象方法,那么这个类一定是抽象类:

但反过来,有抽象方法的类 一定是抽象类,这个是毫无疑问的。

(6)当一个抽象类 继承一个抽象类的时候,可以不用来重写 当作父类的那个抽象类的抽象方法:

那么,有没有一种无限套娃的可能;

       要记住,“出来混,迟早要还的”;

四、抽象类的理解

有的人就可能会特别的迷糊:

       别人告诉他,一个类,居然不可以实例化对象,那么这个类 还有什么意义呢 ?

给大家看一段代码:

有的人可能会疑问:

       这个抽象类 怎么看起来和普通类 没有什么区别呢?都有成员变量和成员方法啊!

       其实,这些人说的没错;

       确实抽象类和普通类基本上没有什么区别;

       唯一的区别就是:抽象类 多了一个抽象方法,让这个类同时被abstract修饰,使得这个类不可以被实例化了;其他 在里面定义 成员变量、成员方法啥的 都和普通类一样。

那么,回到最初的问题,抽象类 居然不可以被实例化,那么它存在的意义是什么呢?

       其实,抽象类 存在的最大意义是:为了被继承;

当然,这个继承是有条件的:

如果一个普通的类Cycle 继承了 抽象类Shape 之后,此时 必须得要重写 抽象类Shape 当中的所有的抽象方法(下面我只举了一个 只有一个抽象方法的例子):

既然 抽象类的出现是 为了被继承,那么抽象类肯定是父类,

可以引用所有继承它的子类对象;也就是说,抽象类也可以发生向上转型,进一步发生多态:
代码分析:

package Demo1;
//Shape类 称为抽象类
abstract class Shape {
    public String name;
    public int age;
 
    public void eat() {
        System.out.println("吃饭!!!!!!");
    }
    public void sleep() {
        System.out.println("睡觉!!!!!!");
    }
    //draw方法 称为抽象方法
    public abstract void draw();
}
 
class Cycle extends Shape {
    @Override
    public void draw() {
        System.out.println("○");
    }
}
 
class Rect extends Shape {
    @Override
    public void draw() {
        System.out.println("  ⃟ ");
    }
}
 
class Triangle extends Shape {
    @Override
    public void draw() {
        System.out.println("△");
    }
}
 
class Flower extends Shape {
    @Override
    public void draw() {
        System.out.println("✿");
    }
}
 
public class TestDemo1 {
    public static void drawMap(Shape shape) {
        shape.draw();
    }
    public static void main(String[] args) {
        Cycle cycle = new Cycle();
        Rect rect = new Rect();
        Triangle triangle = new Triangle();
 
        drawMap(cycle);
        drawMap(rect);
        drawMap(triangle);
 
        drawMap(new Flower());
    }
}

代码示例结果: 

五、总结一下抽象类所需要的注意点 

 


总结

今天有关抽象类的学习就到这里了,今天我们也将结束Javase的学习,接下来就让我进入到Javases的学习当中吧!!!!!!!!!我们下个内容再见哦!!!!

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

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

相关文章

二叉苹果树 【树形dp(背包)】

来源:牛客网 题目链接:https://ac.nowcoder.com/acm/contest/25022/1006 题目描述 有一棵二叉苹果树,如果数字有分叉,一定是分两叉,即没有只有一个儿子的节点。这棵树共N个节点,标号1至N,树根编…

rollup.js配置环境变量

场景: 由于项目是通过svelte.js rollup.js框架搭建起来的, 并没有使用到cli脚手架, 没有办法配置不同环境的变量一. 使用cross-env添加环境变量安装cross-env,它可根据不同的系统设置环境变量npm install cross-env --save-dev在 package.json 中:"…

MongoDB索引

介绍 增加查询效率,不必每次都全表扫描单字段索引:在用户单个字段上创建升序/降序索引复合索引:在多个字段上添加索引;如{name:1, age:-1},关注field顺序其他索引:地理空间索引,文本索引&#x…

浙大MBA复试经验和真题分享——知己知彼胜率更高

前段时间跟朋友吃饭的时候,问我在浙大读MBA是什么体验?其实说实话,当时选择浙大,主要还是为了学历,觉得自己一个普通的二本学历真的平平无奇,公司里面新进的员工虽然年纪轻,但学历却很有来头&am…

PySpark任务提交spark-submit参数设置一文详解

目录 前言 一、PySpark集群运行原理 二、spark-submit参数详解 1.指定运行目录 2.--deploy-mode 3.--master 4.驱动程序和执行器资源 5.--files和--verbose 6.Spark提交配置 三.PySpark程序提交配置选项 1.构建一套虚拟环境 2. 模块依赖问题原因 参阅 前言 之前我们已…

MySQL 笔记

文章目录安装MySQL 语法格式MySQL数据类型命令操作数据库CRUD查询创建表删除表修改表操作数据增改删查基础查询条件查询模糊查询排序查询分组查询分页查询聚合函数约束约束分类安装 软件安装|macOS下超详细的MySQL安装 MySQL 语法格式 每条语句以分号;结尾&#…

LeetCode150.逆波兰表达式

LeetCode刷题记录 文章目录📜题目描述💡解题思路⌨C代码📜题目描述 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意 有效的算符为 、-、* 和/。…

如何mock当前类的私有方法

背景 基础知识 mockito单元测试:它的做法是mock掉当前类的所有外部依赖,保障自己的代码没有问题。举个例子,如果数据库查询的语句出了问题,单元测试不会测试出来。因为它直接mock掉了,不会去真的去查数据库。从这点来…

电压放大器在大功率脉冲电能源研究中的应用

实验名称:大功率脉冲电能源高精度测试技术研究 研究方向:仪器仪表测试 测试目的: 传统的测量精度校准的方法是对传感器单一频率下的刻度因子进行校准,校准方法通常选用同轴分流器串联于放电回路中,通过测量同轴分流器两…

Ubuntu18.04下安装mysql并使用QT成功编译驱动方法

开发环境:Ubuntu18.04QT5.14.2MySQL5.7.240 编译步骤: 1、安装mysql软件和驱动: 打开终端命令,执行安装语句如下: sudo apt-get install mysql-server sudo apt-get install mysql-client sudo apt-get install lib…

MyBatisPlus(MP)学习记录(分页查询的开启+日志打印配置)

MP介绍(官网链接) MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 前言 本篇文章展示的MP教学中涉及到的版本如下: IDE…

使用Xshell 将Linux文件下载到本地或者将本地的文件上传到Linux

第一步:在Linux中安装上传下载功能的软件 sudo apt install lrzsz第二步:将Linux文件下载到本地:此时我的Linux桌面上有一个叫test.c的文件,我要将它下载到windows桌面上。 在Linux终端输入: sz test.c这里使用的是…

座舱显示的未来到底是什么?宝马供应商给出了答案

“显示器是汽车的核心人机界面,”业内人士表示,与此同时更智能化、体验更好的显示解决方案在驾驶舱的设计中起着核心作用。 屏幕及其增强驾驶体验的巨大潜力正迅速成为未来智能网联汽车DNA的一部分。高分辨率、大尺寸以及曲面屏、OLED屏等等新元素&…

【手写 Vue2.x 源码】第十九篇 - 根据 vnode 创建真实节点

一,前言 上篇,根据 render 函数,生成 vnode,主要涉及以下几点: 封装 vm._render 返回虚拟节点_s,_v,_c的实现 本篇,根据 vnode 虚拟节点渲染真实节点 二,根据 vnode 创…

SpringCloud项目实例3--Nacos整合

然后新建一个Module,命名为nacos-provider-demo,Java代码的包名为ltd.newbee.cloud。在该Module的pom.xml配置文件中增加parent标签,与上层Maven建立好关系。之后,在这个子模块的 pom.xml 文件中加入Nacos的依赖项 spring-cloud-s…

谈一谈暴露偏差

文章由参考文章重新组合而来。 暴露偏差又叫Exposure Bias,是由Teacher Forcing 导致的。 Teacher Forcing Teacher Forcing 是一种用于序列生成任务的训练技巧,与Autoregressive模式相对应,这里阐述下两者的区别: Autoregres…

【Flink系列】部署篇(一):Flink集群部署

主要回答以下问题: Flink集群是由哪些组件组成的?它们彼此之间如何协调工作的?在Flink中job, task, slots,parallelism是什么意思?集群中的资源是如何调度和分配的?如何搭建一个Flink集群?如何配置高可用服…

目标检测再升级!YOLOv8模型训练和部署

一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion:2023.1.12 Last edited: 2023.1.12 目录 目标检测再升级!YOLOv8模型训练和部署 简介 YOLOv8创新改进点 区别 1、C2f模块是什么&…

探索与创新:低代码助力金融数字化转型发展

“十四五”规划和 2035 年远景目标纲要提出“加快数字化发展,建设数字中国”,并就打造数字经济新优势、加快数字社会建设步伐、提高数字政府建设水平、营造良好数字生态作出战略部署。这为数字中国的下一步发展指明了方向,提供了指引。可以说…

CentOS环境下Rabbit集群部署

前言本次Rabbit集群部署所使用的的软件版本erlang:erlang-23.3.3-1.el7.x86_64.rpm ,rabbitmq:rabbitmq-server-3.8.23-1.el7.noarch.rpm本次Rabbit集群部署需要安装在两台CentOS服务器分别为svr-app-rabbitmq01、svr-app-rabbitmq02&#xf…