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")的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理. ...
随机推荐
- Memlab,一款分析 JavaScript 堆并查找浏览器和 Node.js 中内存泄漏的开源框架
Memlab 是一款 E2E 测试和分析框架,用于发现 JavaScript 内存泄漏和优化机会. Memlab 是 JavaScript 的内存测试框架.它支持定义一个测试场景(使用 Puppete ...
- mongodb集群搭建(分片+副本)开启安全认证
关于安全认证得总结: 这个讲述的步骤也是先创建超管用户,关闭服务,然后生成密钥文件,开启安全认证,启动服务 相关概念 先来看一张图: 从图中可以看到有四个组件:mongos.config server ...
- ElastAlert配置和告警规则各种用法
config.yaml配置说明 #用来加载rule的目录,默认是example_rules rules_folder: example_rules #用来设置定时向elasticsearch发送请求 ...
- 《3-D Deep Learning Approach for Remote Sensing Image Classification》论文笔记
论文题目<3-D Deep Learning Approach for Remote Sensing Image Classification> 论文作者:Amina Ben Hamida ...
- Notebook交互式完成目标检测任务
摘要:本文将介绍一种在Notebook中进行算法开发的新方式,新手也能够快速训练自己的模型. 目标检测是计算机视觉中非常常用且基础的任务,但是由于目标检测任务的复杂性,往往令新手望而却步.本文将介绍一 ...
- PAT (Basic Level) Practice 1018 锤子剪刀布 分数 20
大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入 ...
- [题解] Atcoder ARC 142 E Pairing Wizards 最小割
题目 建图很妙,不会. 考虑每一对要求合法的巫师(x,y),他们两个的\(a\)必须都大于\(min(b_x,b_y)\).所以在输入的时候,如果\(a_x\)或者\(a_y\)小于\(min(b_x ...
- 2022-08-11-emo了
layout: post cid: 7 title: emo了 slug: 7 date: 2022/08/11 10:14:00 updated: 2022/08/11 10:15:40 statu ...
- 从源码分析 MGR 的流控机制
Group Replication 是一种 Shared-Nothing 的架构,每个节点都会保留一份数据. 虽然支持多点写入,但实际上系统的吞吐量是由处理能力最弱的那个节点决定的. 如果各个节点的处 ...
- SpringBoot (四) - 整合Mybatis,逆向工程,JPA
1.SpringBoot整合MyBatis 1.1 application.yml # 数据源配置 spring: datasource: driver-class-name: com.mysql.c ...