Day24.1:抽象类的详解
抽象类
1.1抽象类概述
一个动物类中,我们创建对象时会去new一个动物;但是我们不应该直接创建动物这个对象,因为动物本身就是抽象的,没有动物这种实例,我们创建的应该是一个具体的动物类,比如猫、狗等动物这种实际的类;而且动物这个抽象的类不应该有具体的方法,因为只有具体的某一种动物才有具体的方法,所以这种抽象的类中应该也只有一个抽象的方法名,例如吃,睡等;而没有具体的方法(吃鱼,吃骨头)。
在Java中,一个没有方法体的方法应该被定义为抽象方法;而类中如果有抽象方法,那么这个类就必须定义为抽象方法。
抽象类的关键字是abstract。
我们通过代码来对抽象类做进一步了解:
//我们先来创建一个动物类,再加入一个没有方法体的方法
public class Animals{
public void eat();
}
当我们创建一个动物类,再加入一个没有方法体的方法时,系统会报错:

系统提示我们:该方法缺失方法体,或者将其声明为抽象类。
我们并不想要方法体,那么我们就将此方法定义为抽象方法,但是我们发现系统又报错了:


方法上的提示是:当前的抽象方法没有在抽象类中;
类上的提示是:Animals类必须声明为抽象类,或者实现类中抽象的方法;
根据这两次的提示,我们可以应证了:如果一个类中含有抽象方法,这个类就必须定义为抽象类
当我们给类加上abstract关键字后,系统不再报错:

1.2抽象类的特点
- 抽象类和抽象方法必须有abstract关键字进行修饰
- 抽象类不能直接实例化,需要通过子类进行实例化
- 抽象类中不一定有抽象方法,但有抽象方法的一定是抽象类
- 抽象类的子类必须全部重写抽象类的抽象方法,要么子类本身也是抽象类
我们通过代码对抽象类的特点进一步了解:
public abstract class Animals{
//抽象类中可以没有方法
}
public abstract class Animals{
//抽象类中可以有其他方法
public void sleep(){
System.out.println("睡觉");
}
}
public abstract class Animals{
//有抽象方法的一定是抽象类
public abstract void eat();
}
关于抽象类的多态

我们创建一个抽象类和其子类,我们发现系统提示子类必须重写父类的抽象方法或者声明为抽象类
我们先来重写父类的抽象方法

当我们在子类中重写父类的抽象方法后,不再报错。
如果我们子类中还是不想重写父类的方法怎么办呢?那就将子类也变成抽象类!

我们尝试对抽象类进行实例化:

系统提示Animals类为抽象类无法被实例化;
我们只有通过子类的实例化来对父类变量进行初始化

1.3抽象类的成员特点
- 抽象类中可以有成员变量(变量、常量)、成员方法(抽象方法:限定子类必须完成某些动作;非抽象方法:提高代码的复用性)
- 抽象类中可以有构造方法(有参、无参),作用是用于子类访问父类数据的初始化
Day24.1:抽象类的详解的更多相关文章
- iOS:核心动画的详解介绍:CAAnimation(抽象类)及其子类
核心动画的详解介绍:CAAnimation(抽象类) 1.核心动画基本概念 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍! 使用它 ...
- Kotlin——最详细的抽象类(abstract)、内部类(嵌套类)详解
如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索QQ群号:497071402 进入正题 在前面几个章节中,详 ...
- 第十八节:详解Java抽象类和接口的区别
前言 对于面向对象编程来说,抽象是它的特征之一. 在Java中,实现抽象的机制分两种,一为抽象类,二为接口. 抽象类为abstract class,接口为Interface. 今天来学习一下Java中 ...
- “全栈2019”Java第五十九章:抽象类与抽象方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 详解 缓冲区(Buffer 抽象类)
在本篇博文中,本人主要讲解NIO 的两个核心点 -- 缓冲区(Buffer) 和 通道 (Channel)之一的 缓冲区(Buffer), 有关NIO流的其他知识点请观看本人博文<详解 NIO流 ...
- 第7.20节 案例详解:Python抽象类之真实子类
第7.20节 案例详解:Python抽象类之真实子类 上节介绍了Python抽象基类相关概念,并介绍了抽象基类实现真实子类的步骤和语法,本节结合一个案例进一步详细介绍. 一. 案例说明 本节定义 ...
- 第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类
第7.19节 Python中的抽象类详解:abstractmethod.abc与真实子类 一. 引言 前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不 ...
- C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解
前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 C#进阶系列——WebApi接口传参不再困惑:传参详解 ...
- ASP.NET Core的配置(2):配置模型详解
在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvi ...
- MVC过滤器详解
MVC过滤器详解 APS.NET MVC中(以下简称"MVC")的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理. ...
随机推荐
- 三门问题模拟对比试验——附VB6和Python3源程序及EXE文件
三门问题模拟对比试验 [直接跳转到文件下载] 前言 "三门问题"是一个很有意思的概率论问题,涉及贝叶斯公式,是人工智能领域的一个经典问题. 为了直观地研究这个问题,也为了测试一下P ...
- 【Java面试】这应该是面试官最想听到的回答,Mysql如何解决幻读问题?
"Mysql如何解决幻读问题" 一个工作了4年小伙伴,去一个美团面试,遇到了这样一个问题. 大家好,我是Mic,一个工作了14年的Java程序员 关于这个问题,面试官想考察什么?我 ...
- 5、Math类
Math类 Math类包含用于执行基本数学运算的方法,如初等数学,对数,平方根和三角函数 常用方法 //Math 常用方法(静态方法) //1.abs 绝对值 int abs = Math.abs(- ...
- Python实验报告——第4章 序列的应用
实验报告 [实验目的] 1.掌握python中序列及序列的常用操作. 2.根据实际需要选择使用合适的序列类型. [实验条件] 1.PC机或者远程编程环境. [实验内容] 1.完成第四章 序列的应用 实 ...
- Winsw将jar包部署为windows服务
1. 下载Winsw https://github.com/winsw/winsw/releases 下载winsw官网上的xml文件和.exe文件 2. 编辑配置文件 创建一个文件夹demo,将所需 ...
- CAS核心思想、底层实现
★ 1.CAS 是什么 CAS 是比较并交换,是实现并发算法时常用到的一种技术.当内存的值和期望的值相等时,进行更新,否则 什么都不做 或 重来 . CAS 的底层实现:是靠硬件实现的,靠硬件的原子性 ...
- 文本数据挖掘---课后作业shuffle函数洗牌C++
题目: 代码如下:#include <iostream> #include <random> #include <algorithm> #include <v ...
- Docker容器获取宿主机信息
最近在做产品授权的东西,开始宿主机为Window,程序获取机器硬件信息相对简单些,后来部署时发现各种各样的的环境问题,所有后来改用dokcer部署,docker方式获取宿主机信息时花了些时间,特此记录 ...
- 5G 与数字化转型的关系是怎样的?
5G提供的是通信网络服务,数字化转型需要网络服务,但并不是必须使用5G网络,也就是说5G在数字化转型中并不是必虚的,但可以作为备选项,不过在某些行业比如农业.林业.牧业.港口.建筑等布设有线网络.无线 ...
- Node.js(二)express
npm init -y(初始化项目) npm install express(引入express) npx express-generator -e(自动生成模板.添加对 ejs 模板引擎的支持) a ...