Java进阶学习笔记13——抽象类

认识抽象类:

当我们在做子类共性功能抽取的时候,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了。在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类就定义为抽象类。

在Java中有一个abstract,它是抽象的意思,可以用它修饰类、成员方法。

package cn.ensource.d4_abstract;

// 抽象类
public abstract class A {
    // 抽象方法,必须用abstract修饰,并且只有方法签名,不能有方法体
    public abstract void run();
}

我们要注意的是:

抽象类不能创建对象。 

 A 是一个抽象类,不能被实例化。

抽象类仅作为一种特殊的父类,让子类继承并实现。

 A 类:

package cn.ensource.d4_abstract;

// 抽象类
public abstract class A {
    private String name;
    public static String schoolName;

    public A() {
    }

    public A(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static String getSchoolName() {
        return schoolName;
    }

    public static void setSchoolName(String schoolName) {
        A.schoolName = schoolName;
    }

    // 抽象方法,必须用abstract修饰,并且只有方法签名,不能有方法体
    public abstract void run();
}

B类:

package cn.ensource.d4_abstract;

// 抽象类:一个类继承了抽象类,必须重写完抽象类的全部抽象方法
public class B extends A{

    @Override
    public void run() {
        System.out.println("B run");
    }
}

测试类:

package cn.ensource.d4_abstract;

public class Test {
    public static void main(String[] args) {
        // 目标:认识抽象类和其特点

        // 注意:抽象类不能创建对象
//        A a =  new A();

        B b = new B();
        b.run();
    }
}

抽象类的场景和好处:

也就是说:所有子类都要完成这个方法。那我们在父类中抽象出这个抽象方法。

实现行为多态。

抽象类不是不能调用方法,是不能创建对象。

使用了抽象类,更专业,多态会更好!

强制子类重写方法。

abstract类:

package cn.ensource.d4_abstract2;

public abstract class Animal {
    private String name;

    public abstract void cry();  // 让子类都进行重写方法,由子类实现,对多态支持更好


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 Cat类:

package cn.ensource.d4_abstract2;

public class Cat extends Animal{
    @Override
    public void cry() {
        System.out.println("喵喵~");
    }
}

Dog类:

package cn.ensource.d4_abstract2;

public class Dog extends Animal{
    @Override
    public void cry() {
        System.out.println("旺旺~");
    }
}

测试类:

package cn.ensource.d4_abstract2;

public class Test {
    public static void main(String[] args) {
        // 掌握抽象类的好处
        Animal a = new Cat();
        a.setName("叮当猫");
        a.cry();       // 更好地支持了多态
        System.out.println(a.getName());
    }
}

抽象类的应用场景和超出是什么?

父类知道每个子类都要做某个行为,但每个子类要做的情况不太一样,父类就定义成抽象方法,交给子类去重写实现。我们抽象出来的抽象类,就是为了更好地支持多态。

抽象类我们不是非要用的。强制子类重写。

用抽象类是最佳实践,不用也是可以的。但是使用是最佳实践。 

抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。

抽象类是不能实例化的:

抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态。

抽象类的子类:

要么重写抽象类中的所有抽象方法。

要么是抽象类。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ASP+ACCESS基于WEB网上留言板

摘要 本文概述了ACCESS数据库及其相关的一些知识,着重论述ACCESS数据库和ASP的中间技术,构建一个简单的留言板。具体的实现是构造一个留言板系统,能很方便的和同学沟通和交流。留言板具有功能强大、使用方便的特点。用户以个人的身份进入&am…

jenkins+sonarqube部署与配置过程

1、部署jenkins(本文不做说明) 2、部署sonarqube(docker-compose) version: "2.1"services:sonarqube:image: sonarqube:9.9.4-communitycontainer_name: sonarqubedepends_on:- dbports:- 9000:9000networks:- sonarnetenvironment:SONARQU…

集合、Collection接口特点和常用方法

1、集合介绍 对于保存多个数据使用的是数组,那么数组有不足的地方。比如, 长度开始时必须指定,而且一旦制定,不能更改。 保存的必须为同一类型的元素。 使用数组进行增加/删除元素的示意代码,也就是比较麻烦。 为…

深入理解CPU缓存一致性

存储体系结构 速度快的存储硬件成本高、容量小,速度慢的成本低、容量大。为了权衡成本和速度,计算机存储分了很多层次,有寄存器、L1 cache、L2 cache、L3 cache、主存(内存)和硬盘等。 根据程序的空间局部性和时间局…

【qt】标准型模型 下

标准型模型 一.前言二.预览数据1.获取表头2.获取数据项 三.保存文件1.文件对话框获取保存文件名2.用文件名初始化文件对象3.打开文件对象4.用文件对象初始化文本流5.写入数据 四.格式1.居右2.居中3.居左4.粗体 五.模型的信号1.解决粗体action问题2.状态栏显示信息 六.总结 一.前…

visual studio 2022 ssh 主机密钥算法失败问题解决

 Solution - aengusjiang 问题: I follow the document, then check sshd_config, uncomment“HostKey /etc/ssh/ssh_host_ecdsa_key” maybe need add the key algorithms: #HostKeyAlgorithms ssh-ed25519[Redacted][Redacted]rsa-sha2-256,rsa-sha2-512 Ho…

【C++初阶】vector

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

交叉熵损失函数计算过程(tensorflow)

交叉熵损失函数通常用于多类分类损失函数计算。计算公式如下: P为真实值,Q为预测值。 使用tensorflow计算 import tensorflow as tf import keras# 创建一个示例数据集 # 假设有3个样本,每个样本有4个特征,共2个类别 # 目标标签…

【退役之重学Java】关于B+树索引

一、为什么使用索引 一条数据可能有很多字段,数据量比较大,挨个查询效率极差故使用索引,提高查询性能和加快数据检索速度。同时还可以帮助优化排序、分组和连接操作,提高数据库系统的整体性能和响应速度。 二、为什么要用 B 树 B树…

【全开源】点餐小程序系统源码(ThinkPHP+FastAdmin+UniApp)

基于ThinkPHPFastAdminUniApp开发的点餐微信小程序,类似肯德基,麦当劳,喜茶等小程序多店铺模式,支持子商户模式,提供全部前后台无加密源代码和数据库,支持私有化部署。 革新餐饮行业的智慧点餐解决方案 一…

设计模式—23种设计模式重点 表格梳理

设计模式的核心在于提供了相关的问题的解决方案,使得人们可以更加简单方便的复用成功的设计和体系结构。 按照设计模式的目的可以分为三大类。创建型模式与对象的创建有关;结构型模式处理类或对象的组合;行为型模式对类或对象怎样交互和怎样…

视频怎么转换成二维码图片?视频做成二维码播放的方法

怎样在电脑上制作可以播放视频的二维码呢?很多日常生活中,很多的场景或者物品都会有自己的二维码,其他人通过扫码就可以获取对应的内容。有很多场景下会把视频转换二维码,通过扫码在手机上查看视频内容,比如产品介绍、…

408数据结构-图的基本概念 自学知识点整理

*第六章个人感觉是最难的,请各位抓稳扶手,系好安全带。 图的定义 通俗来讲,一个图由一些点和连接这些点的若干边组成,边的两头必须都有顶点,否则不是图。 注:G: Graph; V: Vertex; …

Hive安装教程

前置条件:hadoop&mysql docker容器安装mysql-CSDN博客 以下的/opt/bigdata目录根据自己实际情况更改 1.上传hive包并解压 tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/bigdata/ 2.修改路径 mv /opt/bigdata/apache-hive-3.1.3-bin/ hive cd /opt/bigdata/hive/…

螺旋矩阵的思想

方阵类型 https://leetcode.cn/problems/spiral-matrix-ii/ lc59: 螺旋矩阵, 解题思路 关键点: 上方, 从左到右; 右侧,从上到下; 下方,从右到左; 左侧, 从下往上&…

加密与解密(第四版)】第二十五章笔记

第二十五章 数据取证技术 25.1 硬盘数据的获取和固定 取证专用的Linux可启动光盘 硬盘复制机 利用取证计算机复制硬盘 手机(JTAG) 电子数据的固定(HASH值) 25.2 硬盘的分区和数据恢复 25.3 内存分析 25.4 动态仿真技术 25.…

SpringBoot——整合Thymeleaf模板

目录 模板引擎 新建一个SpringBoot项目 pom.xml application.properties Book BookController bookList.html ​编辑 项目总结 模板引擎 模板引擎是为了用户界面与业务数据分离而产生的,可以生成特定格式的页面在Java中,主要的模板引擎有JSP&…

探索Python编程世界:从基础到实战

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、Python语言简介与动态特性 代码示例:动态类型与变量命名 二、Python应用领…

【软件设计师】大题

一、数据流图 基础知识 数据流图(Data Flow Diagram,DFD)基本图形元素: 外部实体(External Agent) 表示存在于系统之外的对象,用来帮助用户理解系统数据的来源和去向加工(Process)数…

犀牛8 for Mac/Win:重塑三维建模的新标杆

在数字创意的浪潮中,犀牛8(Rhinoceros 8)作为一款卓越的三维建模软件,以其强大的功能和出色的性能,在Mac和Windows平台上都赢得了广大设计师和工程师的青睐。 犀牛8不仅继承了前代产品的优秀基因,更在细节…