【JavaSE】抽象类

news2025/7/27 22:59:35

前言:

 

作者简介:爱吃大白菜1132

人生格言:纸上得来终觉浅,绝知此事要躬行

 

如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步!

 

如果觉得博主文章还不错的话,希望三连支持!

1.抽象类

1.1抽象类的概念 

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

1.2抽象类的语法 

// 抽象类:被abstract修饰的类
public abstract class Shape {
    
    // 抽象方法:被abstract修饰的方法,没有方法体
    abstract public void draw();
    abstract void calcArea();
    
    // 抽象类也是类,也可以增加普通方法和属性
    public double getArea(){
        return area;
    }

    protected double area; // 面积
}

 注意:抽象类也是类,内部可以包含普通方法和属性,甚至构造方法

1.3 抽象类特性

1.抽象类不能实例对象 

abstract class Shape {
    
    
}

public class Test_11_17 {
    public static void main(String[] args) {
        Shape shape=new Shape();//error
    }
}

 2. 抽象方法不能是 private 的

abstract class Shape {
    abstract private void draw();//error

}

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

    }
}

 注释:抽象方法不能用private修饰这就很好理解,private修饰符的访问权限是同意个包的同一类,抽象类不能实例化因此就自相矛盾了,并且抽象类的意义主要是对方法重写,如果用private修饰符修饰完全没给子类重写的机会。

3. 抽象方法不能被final和static修饰,因为抽象方法要被子类重写 

public abstract class Shape {
    abstract final void methodA();
    abstract public static void methodB();
}

 4. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,如果不重写父类中的方法子类也要修改成抽象类使用 abstract 修饰。

abstract class Shape {
    abstract public void draw();
}
class Circle extends Shape {
    @Override
    public void draw() {
        System.out.println("⚪");
    }
}

public class Test_11_17 {
    public static void main(String[] args) {
        Circle circle=new Circle();
        circle.draw();
    }

5. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类

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

 1.4抽象类的作用

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

        普通的类也可以被继承, 普通的方法也可以被重写, 为啥非得用抽象类和抽象方法呢?

        确实如此. 但是使用抽象类相当于多了一重编译器的校验. 使用抽象类的场景就如上面的代码, 实际工作不应该由父类完成, 而应由子类完成. 那么此时如果不小心误用成父类 了, 使用普通类编译器是不会报错的. 但是父类是抽象类就会在实例化的时候提示错误, 让我们尽早发现问题. 很多语法存在的意义都是为了 "预防出错", 例如我们曾经用过的 final 也是类似. 创建的变量用户不去修改, 不就相当于常量嘛? 但是加上 final 能够在不小心误修改的时候, 让编译器及时提醒我们. 充分利用编译器的校验, 在实际开发中是非常有意义的.

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

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

相关文章

知物由学 | 弹幕蜂拥而入,智能审核平台如何用技术破局?

导读:弹幕的出现增加了视频观看者的深度参与感,弹幕也逐渐成为国内各大视频网站最基本的评论交互形式,本文将通过网易易盾在弹幕实现原理及交互方式方面的实践,具体介绍弹幕相较于传统聊天室的区别与实践经验,希望能为…

【检索资讯】2022年控制理论与应用国际会议(ICOCAT 2022)已成功被EI检索

ICOCTA 2022(www.icocta.org) 2022年控制理论与应用国际会议(ICOCAT 2022)已成功被EI,Scopus检索,作者可自行登录EI数据库查询检索, ICOCTA 2023会议预告 重要信息 会议官网:www.i…

新品速看丨创新微MinewSemi正式推出GNSS高精度卫星定位导航模块

致力于GNSS、蓝牙、Wi-Fi、LoRa、UWB等物联网无线模块研究的一站式供应商——创新微MinewSemi近日推出了数款基于多种卫星导航授时、多星多频、具有低功耗、高灵敏度、抗干扰、高性能的工业级GNSS高精度定位模块。 此次推出的GNSS模块各有特点,满足用户不同需求&…

【LeetCode】用队列实现栈和用栈实现队列(C语言)

目录 1.用队列实现栈 增删 求栈顶元素 判断栈为空 2.用栈实现队列 增删 返回队列开头的数据 判断队列为空 尾言 源码 队列实现栈 栈实现队列 刚讲完栈和队列,LeetCode上有两题栈与队列的互相实现,简单地讲讲思路和实现吧。 1.用队列实现栈 原题地址&am…

婴幼儿蛋白质过敏怎么回事

很多孩子吃了含蛋白质的食物后会出现瘙痒或痱子等过敏症状,甚至全身发红。这是因为一些过敏体质的孩子儿童会对蛋白质过敏。婴儿蛋白质过敏会导致一些严重的问题,那么当婴儿蛋白质过敏发生时,该怎么以下是一个详细的介绍!目录蛋白…

[Spring Boot]08 IDEA接入MyBatisCodeHelper代码自动生成器

目录前言一、插件市场安装插件二、使用插件自动生成代码前言 上次介绍了,原生mybatis的方法: 06 Spring Boot接入mybatis通用mapper插件自动生成器。 这次,再介绍下插件MyBatisCodeHelper-Pro的用法,使用此方法更加简单和方便。 …

老照片修复工具哪个好?这几个修复软件你快看看

相信我们很多小伙伴的爷爷奶奶家里都会有很多老照片,这些照片由于年代久远,或多或少都会有些损坏,不是泛黄就是有些褶皱,如果我们想将照片进行流传下去,肯定就是将其修复并重新洗出来啦。要是不想出门找专业的摄影师修…

Spring Boot 整合 MyBatis Plus实现多数据源的两种方式

第一种&#xff1a;使用配置类的方式&#xff1a; 项目结构 xml依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-ins…

hadoop 3.3大数据集群搭建系列3-安装Hive

文章目录一. 下载hive二. 解压三. 添加Hive核心配置&#xff0c;选择远程MySQL模式四. 下载连接MySQL的驱动包到hive的lib目录下五. MySQL下创建hive数据库六. 执行Hive的初始化工作七. 验证初始化是否成功八. 使用hive参考:一. 下载hive cd /home/software wget https://mirr…

简单搭建redis哨兵集群

文章目录简单搭建redis哨兵集群配置参数说明配置部署哨兵集群检查哨兵状态其他配置踩坑记录简单搭建redis哨兵集群 配置参数说明 sentinel monitor mymaster 10.0.0.4 6379 指定对一个 master 的监控&#xff0c;给监控的 master 指定的一个名称。 sentinel down-after-mill…

Ubuntu配置NFS服务器(Linux挂载Linux)

Ubuntu配置NFS服务器 服务器端的配置 Ubuntu安装NFS服务器端 sudo apt-get install nfs-kernel-server服务端查看版本 nfsstat -s在桌面上创建共享目录 mkdir share修改/etc/export配置文件&#xff0c;在后面添加如下语句 /home/xxx/桌面/share *(rw,sync,no_root_squas…

Java异常处理机制

文章目录异常的概念引入的小例子基本概念异常体系图常见异常分类常见的运行时异常编译异常异常处理try-catch-finallythrows小练习自定义异常自定义异常的步骤throw与throws练习题异常的概念 引入的小例子 public class Exception01 {public static void main(String[] args)…

如何在图片上添加水印?快把这些方法收好

相信有些小伙伴经常会在网络上&#xff0c;分享自己拍摄的图片吧。那大家是否有遇到过发布的图片&#xff0c;被其他人盗用&#xff0c;并在其它平台上发布的情况呢&#xff1f;其实我们可以在图片上添加上个人水印&#xff0c;这样子就可以有效减少图片被人盗用的情况。那你们…

【springboot】20、Spring Boot 整合 MyBatis

文章目录基本介绍1、引入相关依赖2、数据库基本配置3、编写mapper接口和映射文件4、指定Mapper文件的位置5、测试总结基本介绍 MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果…

英伟达RTX 4080正式发布!这一波是谁赢麻了?

在RTX40系列发布之前&#xff0c;我一直以为今年经济不行&#xff0c;直到看到大家抢购4090的样子&#xff0c;才发现只有我的经济不行。 距离英伟达 RTX 4090显卡的发布已经过去了一个月&#xff0c;40系列家族又出一员大将——英伟达 RTX 4080&#xff0c;公版定价9499在上市…

什么是RC低通滤波电路

滤波电路顾名思义就是滤除不需要的信号&#xff0c;保留需要的信号&#xff0c; 其中无源RC滤波电路要数最简单的滤波电路了。 电路图的话大家加可以看下&#xff0c;包含一个电阻和电容。 低通的话就是频率低的信号可以无衰减的通过&#xff0c;频率高得信号会产生衰减&#…

主成分分析(机器学习)

目录 主成分分析&#xff08;PCA&#xff09;是最常用的线性降维方法 设有m条n维数据&#xff0c;PCA的一般步骤如下 主成分分析&#xff08;PCA&#xff09;是最常用的线性降维方法 它的目标是通过某种线性投影&#xff0c;将高维的数据映射到低维的空间中 并期望在所投影的…

如何使用Docker搭建ES集群

1、配置虚拟机 1.1、设置内存 将虚拟机内存设置为4G&#xff0c;内存太小可能导致某个ES节点无法正常运行&#xff1b; 1.2、修改limits.conf limits.conf文件可以设置用户最大可创建文件的数量 a、执行vi /etc/security/limits.conf命令—>文件末尾添加如下内容&#…

计算机毕业设计ssm+vue+elementUI 基于vue的消防物资存储系统

项目介绍 无论是什么行业物资存储都是一个非常重要的内容&#xff0c;只有有了这些良好的物资存储&#xff0c;才能够为后续的工作开展提供便利。消防是一个关系到人民群众安全的工作&#xff0c;所以在消防相关方面的物资存储也是非常重要的内容。为了能够更好的管理好消防相…

电压放大器如何选择型号规格(电压放大器选型标准)

电压放大器是搭配信号发生器来组合使用的电子仪器&#xff0c;使用时通过简单的设备连接&#xff0c;就能拓展信号源的输入电压幅度范围。高电压放大器的快速响应不仅是表现在功率放大器的宽带和压摆率等参数上&#xff0c;同时还和最大输出电流以及负载的电容特性有关系。下面…