抽象类--java学习笔记

news2024/11/18 0:15:28

什麽是抽象类?

  • 在java中有一个关键字叫:abstract,它就是抽象的意思,可以用它修饰类、成员方法
  • abstract修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法
     

 认识抽象类

 抽象类的注意事项、特点

  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  • 类该有的成员(变量、方法、构造器)抽象类都可以有
  • 最主要的特点:抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现
  • 一个类继承抽象类,必须完全重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类

使用抽象类的好处 

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

示例:

需要设计猫和狗类,它们都有自己的名字,猫会喵喵叫,狗会汪汪叫

 抽象宠物类:

public abstract class Pet { //定义抽象类
    private String name;    //名字

    public abstract void cry(); //发出叫声方法

    public String getName() {
        return name;
    }

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

猫类:

public class Cat extends Pet {  //猫类,继承宠物抽象类
    @Override
    public void cry() { //重写方法
        System.out.println(getName()+":喵喵喵~");
    }
}

狗类:

public class Dog extends Pet{   //狗类,继承宠物抽象类
    @Override
    public void cry() { //重写方法
        System.out.println(getName()+":汪汪汪~");
    }
}

Test:

public class Test {
    public static void main(String[] args) {
        Pet c = new Cat();
        c.setName("武斗酷猫");
        c.cry();    //更好的支持多态

        Pet d = new Dog();
        d.setName("音速犬");
        d.cry();
    }
}

运行结果:

抽象类的常见应用场景:模板方法设计模式

模板 方法设计模式解决了什么问题?

  • 解决了方法中存在重复代码的问题

模板方法设计模式的写法

  • 定义一个抽象类
  • 在里面定义2个方法:一个是模板方法,把相同代码放进去,一个是抽象方法,把具体实现交给子类完成
  • 建议使用final关键字修饰模板方法,避免子类重写模板 

示例:

比如用模板方法设计模式完成刚才的问题

抽象宠物类:

public abstract class Pet { //定义抽象类
    private String name;    //名字

    public void cry(){  //模板方法
        System.out.print(getName()+"发出了");
        voice();    //主体部分交给子类完成
        System.out.println("的叫声");
    }

    public abstract void voice(); //发出叫声方法

    public String getName() {
        return name;
    }

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

 猫类:

public class Cat extends Pet {  //猫类,继承宠物抽象类
    @Override
    public void voice() { //主体部分由子类确定发出什么声音
        System.out.print("喵喵喵~");
    }
}

狗类:

public class Dog extends Pet{   //狗类,继承宠物抽象类
    @Override
    public void voice() { //主体部分由子类确定发出什么声音
        System.out.print("汪汪汪~");
    }
}

Test:

public class Test {
    public static void main(String[] args) {
        Pet c = new Cat();
        c.setName("武斗酷猫");
        c.cry();

        Pet d = new Dog();
        d.setName("音速犬");
        d.cry();
    }
}

运行结果:

这个例题代码量太少可能看不出什么效果,当代码量多的时候就可以体现出减少重复代码的优势了 

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

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

相关文章

2024.1.15每日一题

LeetCode 82.删除排序链表中的重复元素 II 82. 删除排序链表中的重复元素 II - 力扣(LeetCode) 题目描述 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例…

Mac M1 Parallels CentOS7.9 Rancher + K8S + Gitlab + Jenkins +Harbor CICD

一、资源清单 机器名称IP地址角色k8srancher高可用部署: https://blog.csdn.net/qq_41594280/article/details/135312148rancher10.211.55.200管理K8S集群k8svip10.211.55.199K8S VIPmaster0110.211.55.201K8S集群主节点master0210.211.55.202K8S集群主节点master0310.211.55.…

AC修炼计划(AtCoder Beginner Contest 335)E-F

传送门: AtCoder Beginner Contest 335 (Sponsored by Mynavi) - AtCoder A,B,C,D还算比较基础,没有什么思路,纯暴力就可以过。 这里来总结一下E和F E - Non-Decreasing Colorful Path 最开始以为是树形…

JVM:从零到入门

JVM,就是Java虚拟机。 JVM是一个巨大的话题,我们本文主要简单介绍一些围绕JVM相关的基础知识。 目录 JVM内存区域划分 本地方法栈 虚拟机栈 堆 程序计数器 方法区/ 元数据区 类加载 1.加载 2.验证 3.准备 4.解析 5.初始化 双亲委派模型 …

任务7:安装MySQL数据库

任务描述 知识点: MySQL数据库安装与使用 重 点: 基于CentOS系统,安装MySQL数据库 内 容: 安装MySQL数据库修改root用户密码 任务指导 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发&#xff0c…

gcd得最大公约数,辗转相除法理解

欧几里得算法_百度百科 (baidu.com) —————— 百度百科证法一的一些便于理解的细节: 我们求 a 和 b 的最大公约数。 (如果a是b的倍数,那么b就是最大公约数。) a>b,a可以表示为 a kb r 设d为a和b的最大公约…

一二三应用开发平台文件处理设计与实现系列之5——MinIO技术预研

背景 上篇介绍了文件读写框架设计与实现,同时顺便说明了本地磁盘存储模式的实现模式。 今天来说下基于文件读写框架,如何集成对象存储组件minio,集成之前,需要对minio进行必要的了解,本篇是minio的技术预研。 minio简…

pip查看某个包存在的历史版本

简介:当我们想查看某个包有哪些可安装版本,但是又不想去官网查询,如何用pip命令查询出全部历史版本? 历史版本: Python:pip升级超时解决方案 Python:指定的Python版本pip Python&#xff1a…

把模板作为元函数参数传递。

C模板元编程是一种典型的函数式编程,函数在整个编程体系中处于核心的地位。 这里的函数与一般C程序中定义的函数有所区别,其更接近数学意义上的函 数——是无副作用的映射或变换:在输入相同的前提下,多次调用同一个函数&…

mac vscode latex实用

网上有教程怎么在vscode里安装macTex以及插件,然后就可以在latex里写代码了,这里需要修改的是对应的json文件,输入command P,可以看到最近打开的json设置文件,结果如下 然后设置这个json文件,我的json文件设置如下 …

个人网站制作 Part 5 优化网站性能(图片压缩、代码优化) | Web开发项目

文章目录 👩‍💻 基础Web开发练手项目系列:个人网站制作🚀 优化网站性能🔨图片优化🔧步骤 1: 使用压缩工具 🔨代码优化🔧步骤 2: 压缩CSS和JavaScript🔧步骤 3: 合并文件…

js(JavaScript)数据结构之堆(Heap)

什么是数据结构? 下面是维基百科的解释: 数据结构是计算机存储、组织数据的方式。数据结构意味着接口或封装:一个数据结构可被视为两个函数之间的接口,或者是由数据类型联合组成的存储内容的访问方法封装。 我们每天的编码中都会…

聊聊websocket那些事

前端必备工具推荐网站(免费图床、API和ChatAI等实用工具): http://luckycola.com.cn/ 一、什么是websocket? WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议。 它是 HTML5 中的一种新特性,能够实现 Web 应用程序和服务器之间的实时通信,…

事件分析应急响应-Server2229(环境+解析)

任务环境说明: 服务器场景:Server2229(开放链接)用户名:root,密码:

1116: 删除元素(数组)

题目描述 输入一个递增有序的整型数组A有n个元素,删除下标为i的元素,使其仍保持连续有序。注意,有效下标从0开始。 定义如下两个函数分别实现删除元素操作和数组输出操作。 void del(int a[], int n, int i); /*删除数组a中下标为i的元素*…

鸿蒙Harmony-相对布局(RelativeContainer)详解

成年人的世界,从来没有容易二字,想要什么,就得凭自己的努力去拿,遇到事情就得自己生生的硬抗,希望你即使再辛苦,但还是会选择这滚烫的人生,加油陌生的朋友们 目录 一,定义 二&#x…

三菱FX系列PLC定长切割控制(线缆裁切)

三菱PLC绝对定位指令DDRVA实现往复运动控制详细介绍请查看下面文章链接: https://rxxw-control.blog.csdn.net/article/details/135570157https://rxxw-control.blog.csdn.net/article/details/135570157这篇博客我们介绍线缆行业的定长切割控制相关算法。 1、输送…

分布式限流的主流方案

本文已收录至我的个人网站:程序员波特,主要记录Java相关技术系列教程,共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源,让想要学习的你,不再迷茫。 常见的分布式限流方案 前面我们了解了什么是分布式…

30 3D导航栏

效果演示 实现了一个导航栏&#xff0c;其中包含了五个图标&#xff0c;每个图标都有一个悬浮的文字标签&#xff0c;当鼠标悬停在图标上时&#xff0c;文字标签会旋转并向上移动&#xff0c;同时底部会出现一个阴影效果。整个导航栏的背景颜色为浅灰色。 Code <ul><…

【Java】IDEA中的JFormDesigner使用教程

目录 1 安装 JFormDesigner 插件2 JFormDesigner 使用教程2.1 新建JFormDesigner Form时的选项2.2 JFormDesigner Form界面布局2.3 JFormDesigner 常用组件 JFormDesigner 是一款用于设计和创建图形用户界面&#xff08;GUI&#xff09;的插件&#xff0c;它允许开发者使用可视…