首页 > 其他分享 >Day24.1:抽象类的详解

Day24.1:抽象类的详解

时间:2022-11-27 15:58:00浏览次数:34  
标签:Day24.1 子类 abstract 详解 抽象 抽象类 方法 public

抽象类

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,子类,abstract,详解,抽象,抽象类,方法,public
From: https://www.cnblogs.com/CQliuwei/p/16929815.html

相关文章

  • ByteBuffer常用方法详解
    缓冲区(Buffer) 缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区:使用缓冲区有这么两个好处:1、......
  • 二. Dockerfile构建镜像参数详解、Docker镜像分层构建案例 -1
    镜像简介: docker镜像基于unionfilesystem将多个目录合并挂载至一个目录给容器使用。docker镜像只有rootfs而没有内核、运行使用的是宿主机的bootfs。  rootfs(root......
  • 动态规划算法图文详解(Kotlin语言):二维矩阵中找到只包含 1 的最大正方形(LeetCode-22
    题目描述在一个由0和1组成的二维矩阵内,找到只包含1的最大正方形,并返回其面积。示例:输入:1010010 ​​​11​​​ 111 ​​​11​​​ 110010输出:4......
  • Service详解之Service介绍
    Service介绍在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。为了解......
  • 【ClickHouse 内核原理图文详解】关于分区、索引、标记和压缩数据的协同工作...
    概述ClickHouse是一个用于联机分析处理(OLAP)的列式数据库管理系统(ColumnarDBMS)。分区、索引、标记和压缩数据,这些组件配合在一起给ClickHouse数据库带来非常高效的查询......
  • Hadoop Shell 命令详解
    HadoopShell命令​​FSShell​​​​cat​​​​chgrp​​​​chmod​​​​chown​​​​copyFromLocal​​​​copyToLocal​​​​cp​​​​du​​​​dus​​​​exp......
  • TypeScript抽象类
    抽象类(abstractclass)抽象类是专门用来被其他类所继承的类,它只能被其他类所继承不能用来创建实例使用abstract开头的方法叫做抽象方法,抽象方法没有方法体只能定义......
  • 跨公司采购转储详解(图文)(转)
    业务情景:同一集团下的两个公司1100与2100之间的采购业务。1100下设工厂1101,2100下设工厂2101。供货公司1100须先送货到订单公司2100的仓库,然后2100公司再按集团外客户的要......
  • Java中Collections.sort()方法详解
     时间:2022/11/27 在我们写算法题的时候有时需要对给定的List列表进行排序,这样方便之后的操作,此时我们可以用到Collections类中的sort方法,JavaAPI文档中对该方......
  • JavaScript中String的match方法详解
     String.prototype.match()**String.prototype.match()方法返回通过一个正则表达式匹配到的字符串结果。**​​var='Thequickbrownfoxjumpsoverthelazydog.Itba......