Java_抽象类

news2025/7/18 5:47:07

目录

1.抽象类语法

2.抽象类特性

3.抽象类的作用

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

在打印图形例子中, 我们发现, 父类 Shape 中的 draw 方法好像并没有什么实际工作, 主要的绘制图形都是由 Shape 的各种子类的 draw 方法来完成的。像这种没有实际工作的方法, 我们可以把它设计成一个抽象方法(abstract method), 包含抽象方法的类我们称为抽象类(abstract class)。

abstract class Shape {
    public abstract void draw();
}
class Rect extends Shape {
    @Override
    public void draw() {
        System.out.println("画矩形!");
    }
}
class Cycle extends Shape {
    @Override
    public void draw() {
        System.out.println("画圆!");
    }
}
public class Test {
    public static void drawShape(Shape shape) {
        shape.draw();
    }

    public static void main(String[] args) {
        //Shape shape = new Shape();抽象类不能实例化
        drawShape(new Rect());
        drawShape(new Cycle());
    }
}

 

1.抽象类语法

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

//抽象类:被abstract修饰的类
public abstract class Shape {
    //抽象方法:被abstract修饰的方法,没有方法体
    abstract public void draw();
    abstract void calcArea();

    // 抽象类也是类,也可以增加普通方法和属性
    public double getArea(){
        return area;
    }
    protected double area; // 面积
}

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

2.抽象类特性

1)抽象类不能直接实例化对象;

2)抽象方法的修饰限定符不能是 private 的;

abstract class Shape {
    abstract private void draw();
}
// 编译出错
//Error:(4, 27) java: 非法的修饰符组合: abstract和private

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

4)抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰(即当一个子类没有重写父类中的抽象方法,可以把当前子类变为 abstract 修饰,但是当这个子类被另一个类继承时,继承子类的这个类还是得重写之前父类的抽象方法);

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

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

3.抽象类的作用

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

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

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

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

相关文章

RabbitMQ远程访问

文章目录1. 创建用户2. 关闭防火墙开启端口3. 测试远程访问参考链接背景问题 guest这个用户只能使用localhost登录,而不能使用IP地址登录: amqp://guest:guest127.0.0.1:5672/rabbitVHost 远程无法连接amqp://guest:guest10.10.10.128:5672/rabbitVHost …

Elasticsearch simple(2)ElasticSearch windows本地环境搭建(V8.5.1)

切记安装Kibana的版本要和所安装的elasticsearch版本号完全一致。 这里: elasticsearch-8.5.1 kibana-8.5.1 elasticsearch默认端口为9200; Kibana默认端口为5601。 1 elasticsearch的下载和安装 下载官网:https://www.elastic.co/cn/down…

ArcGIS影像TIF拼接

ArcGIS影像TIF拼接 我们要使用的工具是Mosaic To New Raster 这个工具通过下面的路径找到: (我用的是ArcGIS 10.8) 输入影像 在这里输入多张待拼接的TIF 输出文件和路径 Output Loacation是输出文件的路径,可以是文件夹名称或…

MATLAB | MATLAB海洋、气象数据colormap配色补充包(NCL color tables)

众所周知,海洋、气象、水文等一系列学科绘制图像时,因很多时候涉及要将陆地海洋分开或者应对一些非常特殊的情况,因此有很多非常特别的colormap,我之前虽然做过一些常用colormap的补充包但是依旧是无法完全应对各种特殊的colormap…

C语言-基础

C-基础参考变量/常量左值/右值???字面量/常量变量作用域全局变量与局部变量作用域扩展 python数据与地址存储类autoregisterstaticextern数据类型基本类型整数类型进制数原码/补码/反码int 与 char数值溢出浮点类型字符型字符与整数字符与进制…

Selenium隐藏浏览器和元素截屏实践

文章目录隐藏浏览器介绍示例代码浏览器截图介绍示例代码对整个浏览器页面进行截屏指定特定HTML元素进行截屏隐藏浏览器 介绍 在使用Selenium采集网页数据时,需要不断地调用浏览器。实际上,通过对Selenium的设置,可以达到隐藏浏览器的效果。…

堆 (带图详解)

文章目录1.堆的基本概念1. 概念2.性质1.必须为完全二叉树2.满足大堆/小堆成立的条件3.存储方式1.逻辑结构2.物理结构4. 孩子与父亲之间下标的关系2.堆的基本实现1.push——插入1.代码2. 情况分析情况1情况23. 向上调整算法1.过程分析2. 临界条件的判断2. pop—— 删除1.代码2. …

[附源码]计算机毕业设计JAVA火车票订票管理系统

[附源码]计算机毕业设计JAVA火车票订票管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM myba…

【HDU No. 4006】 第k 大的数 The kth great number

【HDU No. 4006】 第k 大的数 The kth great number 杭电OJ 题目地址 【题意】 小明和小宝正在玩数字游戏。游戏有n轮,小明在每轮中都可以写一个数,或者问小宝第k 大的数是什么(第k 大的数指有k -1个数比它大)。 游戏格式为&am…

运维开发实践 - Docker - 容器实现原理

1.Docker容器是什么 按照Docker官网,容器是运行在宿主机上的一个进程,但与宿主机上的其他进程相隔离; 2.容器实现原理 这种隔离机制使用了内核中的namespace和cgroups功能; 2.1.Linux namespace Linux通过将系统的资源放置在…

Redis数据类型之string

文章目录stringⅠ. 增删查改Ⅱ. 加减操作Ⅲ. 数据生命周期Ⅳ. 业务场景 - 高频数据Ⅴ. 注意事项提示:以下是本篇文章正文内容,Redis系列学习将会持续更新 string ● 存储的数据:单个数据,最简单的数据存储类型,也是最常…

Paket在Linux下使用问题

1. 系统软件版本 Linux系统:Debian 10,需安装mono-devel Paket版本:7.1.5 关于Paket的介绍:https://github.com/fsprojects/Paket Paket的发布版本:https://github.com/fsprojects/Paket/releases 2. 使用方法 将…

原来背后都是商业利益,看到网易和暴雪的解约之后,原来是要定以后的KPI,坐地起价,但是一个时代已经结束了,都留在了记忆之中

1,大瓜新闻,2023年1月暴雪游戏中国将不会续约?? 2,原因是主要坐地起价,提高分成设置KPI 还好网易有自研游戏,估计早知道会有现在这样的情况。 提前做好了准备。还记得有个公司叫 九城吗&#x…

Linux操作系统~带你理解文件系统与软硬链接

目录 1.C语言中的FILE和文件描述符对应的file 2.Linux的EXT系列的文件系统 (1).block group中六个部分的内容 inode索引结点相关 Q:这两个inode有什么不同? (2).一个文件的inode和对应的block如何关联…

off-by-one (b00ks)

前言 个人简略记录,过程不详细 gdb开始调试 vmmap查看程序基地址为 0x555555400000 继续运行,输入auth search hollk关键字,auth存放的地址可以找出为:0x555555602040 圈起来的是溢出的 \x00 创建两个books 因为图书的结构体指…

数据库以及数据库常用概念、ER模型相关概念

目录 1.我们为什么要学习数据库? 2.数据库的相关概念: 2.关系型数据库和非关系型数据库的区别 A.关系型数据库: B.非关系型数据库: C.非关系型数据库的相关类别有以下几种: 3.关系型数据库设计规则 4.表、记录、…

华为数据中心VS技术理论讲解

目录 VS之间的关系 VS的配置管理权限 VS之间、VS与外部通信 VS资源分配 VS与其它技术的联合部署 VS的创建和删除 VS(Virtual System)虚拟系统是指将一台物理设备虚拟成多个相互隔离的逻辑设备 逻辑设备之间软硬件隔离,互不影响&#xff…

立体式校验保护,让你的系统避免 90% 以上的 bug

1. 概览 在实际开发过程中,数据校验是最为重要的一环,问题数据一旦进入系统,将对系统造成不可估量的损失。轻者,查询时触发空指针异常,导致整个页面不可用;重者,业务逻辑错误,造成流…

为了买个硬盘,我专门写了篇笔记

文章目录SSD是固态硬盘的一些参数插槽接口总线类型传输协议插槽接口/总线/协议关联参考连接HDD是机械硬盘;SSD是固态硬盘。 SSD是固态硬盘的一些参数 插槽接口 外观不同而已;插槽接口不影响传输速度,但是插槽接口不适配的话是肯定插不到电脑…

力扣(LeetCode)12. 整数转罗马数字(C++)

模拟 罗马数字和掰手指数数的区别在于,IV/IXIV/IXIV/IX 这类倒着数数的,和阿拉伯数字最大的区别在于 555 的 10k10^k10k 倍 k∈Nk\isin Nk∈N ,需要被表示出来。所以除了记录 I/X/C/MI/X/C/MI/X/C/M ——1/10/100/10001/10/100/10001/10/100…