Java开发从入门到精通(十):Java的面向对象编程OOP:抽象类

news2025/1/10 2:22:03

Java大数据开发和安全开发

  • (一)Java的抽象类
    • 1.1 什么是抽象类?
    • 1.2 抽象类的注意事项、特点
    • 1.3 认识一下抽象类
    • 1.4 抽象类的场景和好处
      • 1.4.1 抽象类案例
    • 1.5 抽象类的常见应用场景:模板方法设计模式
      • 1.5.1 模板方法设计模式作用
      • 1.5.1 模板方法设计模式的写法

(一)Java的抽象类

1.1 什么是抽象类?

  • 在Java中有一个关键字叫:abstract,它就是抽象的意思,可以用它修饰类、成员方法
  • abstract修饰类,这个类就是抽象类;
  • abstract修饰方法,这个方法就是抽象方法。
    在这里插入图片描述

在这里插入图片描述

1.2 抽象类的注意事项、特点

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

1.3 认识一下抽象类

  • 创建一个抽象类 该类有成员(成员变量、方法、构造器)
package com.qianxin.chouxiang;
//创建一个抽象类abstract
public abstract class A {
    //类该有的成员(成员变量、方法、构造器)抽象类都可以有
    private String name;
    public static String schoolName;

    // 抽象方法:必须用abstract修饰,但是方法只有方法签名 一定不能有方法体
    public abstract void  run();

    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;
    }
}

抽象类最主要的特点:抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现

public class Test {

    public static void main(String[] args) {
        // 目标:认识抽象类和其特点。
        // 注意:抽象类不能创建对象
        A a = new A();  //报错
        a.run();
    }
}

一个类继承了抽象类,必须重写完抽象类的全部抽象方法,否则自己也要是抽象类 (alt+回车键重写方法)

public class B extends A{

    @Override
    public void run() {

    }
}

1.4 抽象类的场景和好处

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

1.4.1 抽象类案例

需求

  • 某宠物游戏,需要管理猫、狗的数据。
  • 猫的数据有:名字;行为是:喵喵喵的叫~
  • 狗的数据有:名字;行为是:汪汪汪的叫~
  • 请用面向对象编程设计该程序。

在这里插入图片描述
再写一个测试类

  • 实例化一个cat类,调用cry方法
  • cat方法继承了animal的变量和方法
public class Test {
    public static void main(String[] args) {
        // 目标:掌握抽象类的好处,
        Animal a = new cat();
        a.setName("叮当猫");
        a.cry();// 更好的支持了多态
    }
}

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

1.5.1 模板方法设计模式作用

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

在这里插入图片描述

1.5.1 模板方法设计模式的写法

  • 1、定义一个抽象类。
  • 2、在里面定义2个方法
    • 一个是模板方法:把相同代码放里面去
    • 一个是抽象方法:奥具体实现交给子类完成

第一步先来举个例子简单用来理解模板方法设计模式

  • 学生,老师都要写一篇作文:我的爸爸
  • 第一段是一样的
  • 正文部分自由发挥
  • 最后一段也是一样的。

那么我们就可以把相同的部分拿出来做模板,不同的部分作为变量来调用填充
下面这两段代码,可以对比一下重复的代码挺多的,我们可以做个模板

public class Teacher {
    public void write() {
        System.out.println("\t\t\t\t\t《我的爸爸》");
        System.out.println("\t\t我的爸爸好啊,牛逼啊,来看看我的爸爸有多牛");
        System.out.println("我的爸爸也挺好的,让我站在这里别走,他去买点橘子~~~");
        System.out.println("有这样的爸爸太好!");
    }
}
public class student {
    public void write() {
        System.out.println("\t\t\t\t\t《我的爸爸》");
        System.out.println("\t\t我的爸爸好啊,牛逼啊,来看看我的爸爸有多牛");
        System.out.println("我的爸爸特别牛,我开车都不看红绿灯的,下辈子还要做他的儿子~~");
        System.out.println("有这样的爸爸太好!");
    }
}

模板可以定义一个people类,把重复的代码写进去,然后用抽象类抽象方法,实现多态机制,让子类来重写writeMain()

public abstract class People {
/**
* 设计模板方法设计模式
* 1、定义一个模板方法出来次
 **/
    public final void write() { //final防止子类重写write方法  做个保护
        System.out.println("\t\t\t\t\t《我的爸爸》");
        System.out.println("\t\t我的爸爸好啊,牛逼啊,来看看我的爸爸有多牛");
        //2、模板方法并不清楚正文部分到底应该怎么写,但是它知道子类肯定要写。
        System.out.println(writeMain());//调用子类重写的方法来完整作文的正文
        System.out.println("有这样的爸爸太好!");
    }
    // 3、设计一个抽象方法写正文,具体的实现交给子类来完成
    public abstract String writeMain();
}

然后学生和老师那这个模板去写作文就行,正文自己重写自己的,代码可以这样写

public class Student extends People{

    @Override
    public String writeMain() {
        return "我的爸爸特别牛,我开车都不看红绿灯的,下辈子还要做他的儿子~~";
    }
}
public class Teacher extends People{

    @Override
    public String writeMain() {
        return "我的爸爸也挺好的,让我站在这里别走,他去买点橘子~~.";
    }
}

写一个测试类调用一下看看能不能写出作文

public class Test {
    public static void main(String[] args) {
        FoodOperator operator = new FoodOperator();
        operator.start();
        Teacher t = new Teacher();
        t.write();
        Students=new student();
		s.write();
    }
}

作文写的挺好

《我的爸爸》
我的爸爸好啊,牛逼啊,来看看我的爸爸有多牛
我的爸爸也挺好的,让我站在这里别走,他去买点橘子~~~


《我的爸爸》
我的爸爸好啊,牛逼啊,来看看我的爸爸有多牛
我的爸爸特别牛,我开车都不看红绿灯的,下辈子还要做他的儿子~~
有这样的爸爸太好!

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

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

相关文章

AI开发者急需看的大语言模型基本原理

在学习大语言模型的基本原理的时候,发现遇到了很多问题,比如一个个单词是怎么转换为向量的,是提前得到的还是训练过程中得到?Transformer的输出向量又是怎么转化为自然语言的?Finetune的时候不是只需要输入和输出吗&am…

百度驾驶证C++离线SDK V1.1 C#接入

百度驾驶证C离线SDK V1.1 C#接入 目录 说明 效果 项目 代码 下载 说明 自己根据SDK封装了动态库,然后C#调用。 SDK包结构 效果 项目 代码 using Newtonsoft.Json; using OpenCvSharp; using System; using System.Collections.Generic; using System.…

不用Linux也可以的强大文本处理方法

不用Linux也可以的强大文本处理方法 标题党了,其实是论VIM的使用。 做生物信息分析最合适的还是Linux操作系统,所以生信宝典在最开始就推出了Linux学习系列,由浅入深的讲述了Linux学习中的关键点。 主要文章列举如下: Linux学…

连续上榜|全息网御实力入选《中国网络安全行业全景图》

2024年4月12日,国内网络安全专业媒体安全牛正式发布第十一版《中国网络安全行业全景图》(以下简称“全景图”)。 本次全景图研究历时近4个月,共收到510家国内安全厂商4941项申报,实际收录2413项(包含部分往…

Flutter 之 HTTP3/QUIC 和 Cronet 你了解过吗?

虽然 HTTP3/QUIC 和 cronet 跟 Flutter 没太大关系,只是最近在整理 Flutter 相关资料时发现还挺多人不了解,就放到一起聊聊。 本篇也是主要将现有资料做一些简化整合理解。 前言 其实为什么会有 HTTP3/QUIC ?核心原因还是现有协议已经无法满…

van-uploader 在app内嵌的webview中的一些坑

问题: 部分版本在ios 中没有问题,但是安卓中不触发图片选择和拍照(之前是可以的,可能是没有锁定版本,重新发版导致的)。在ios中下拉文案是英文,html配置lang等于 zh 也没有用,ios里…

强化网络安全防线,您的等级保护措施到位了吗?

在这个信息化飞速发展的时代,网络安全已经成为我们每个人都需要关注的问题。无论是企业还是个人,我们的工作和生活都越来越依赖于网络。确保网络环境的安全,防止信息泄露和网络攻击,已经成为了一项至关重要的任务。等级保护制度作…

Oracle 正则,开窗,行列转换

1.开窗函数 基本上在查询结果上添加窗口列 1.1 聚合函数开窗 基本格式: ..... 函数() over([partition by 分组列,...][order by 排序列 desc|asc][定位框架]) 1,partition by 字段 相当于group by 字段 起到分组作用2,order by 字段 即根据某个字段…

​面试经典150题——对称二叉树

1. 题目描述 2. 题目分析与解析 2.1 思路一——递归 为了解决问题“检查一个二叉树是否是对称的”,我们需要判断树的左子树和右子树是否是彼此的镜像。这意味着树的左子树的左侧应该与右子树的右侧相同,左子树的右侧应该与右子树的左侧相同。 定义问题…

基于springboot实现人口老龄化社区服务与管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现人口老龄化社区服务与管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了人口老龄化社区服务与管理平台的开发全过程。通过分析人口老龄化社区服务与管理平台方面的不足&#xff…

Gitee和Git学习笔记

Gitee和Git指令 Gitee提交代码方法1 先将仓库clone到本地,修改后再push到 Gitee 的仓库方法2 本地初始化一个仓库,设置远程仓库地址后再做push 切换分支下载代码通过git clone克隆仓库通过下载 ZIP 的方式下载代码 Git提交指令 解决本地库同时关联GitHub…

货币保卫战,美联储降息预期推迟,油价飙升110美元,亚洲市场股债汇三杀,各国央行操作难度上升!

货币保卫激战 美联储降息预期一降再降,叠加中东局势变化带来避险需求飙升,美元连续第五天上涨之际,新兴市场再次打响“货币保卫战”,而更大的风险似乎仍未过去。亚洲市场普跌,日股跌近2%,韩国股指跌超2%&a…

【好书推荐6】《Excel函数与公式应用大全for Excel 365 Excel 2021》

【好书推荐6】《Excel函数与公式应用大全for Excel 365 & Excel 2021》 写在最前面《Excel函数与公式应用大全for Excel 365 & Excel 2021》关键点内容简介作者简介前言/序言目录 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光&…

新手怎么做好抖音小店?这六点是做店的根本,新手商家做店必读

大家好,我是电商花花。 只要我们开通抖音小店,且缴纳好类目保证金,就可以正常选品,上架商品进行售卖了。 如果你是刚开通抖音小店,想要做好抖音小店,下面这几点,一定要注意看。 一、开通精选联…

低版本Oracle客户端或者CMD连接Oracle 12c数据库报错ORA-1017 ORA-12560

exp test_user/test_user123456jgzh fileC:\jgzh.dmp owner(msagx) compressy; exp test_user/test_user123456jgzh fileD:\jgzh.dmp tables(msagx.C_CB_STUDENT,msagx.C_CB_SUBJECT) feedback10000 compressy;

残差网络理解

看了知乎的一篇关于残差网络的文章,https://zhuanlan.zhihu.com/p/72679537,我想发表一点我自己的看法! 1.我对残差网络的理解 残差网络(ResNet)确实与传统的卷积神经网络(CNN)在结构上有所不同…

Qwen1.5大语言模型微调实践

在人工智能领域,大语言模型(Large Language Model,LLM)的兴起和广泛应用,为自然语言处理(NLP)带来了前所未有的变革。Qwen1.5大语言模型作为其中的佼佼者,不仅拥有强大的语言生成和理…

冯诺依曼与进程【Linux】

文章目录 冯诺依曼体系结构(从硬件的角度描述)冯诺依曼体系结构(从软件的角度描述)操作系统(软件)理解管理系统调用和库函数进程查看进程的两种方式 通过系统调用获取进程的PID和PPID通过系统调用创建进程-…

解决Error (169281)、Error (169282)报错问题,QuartusII设置Virtual Pin虚拟管脚的详细操作方法

解决Error(169281)、Error(169282)报错问题,QuartusII设置Virtual Pin虚拟管脚的详细操作方法 1,QuartusII报错信息2,解决办法3,重新编译,成功参考文献: 1,Quartus如何设置虚拟管脚Virtual Pin(具体设置方法) 1,QuartusII报错信息 报错原因:    为了验证FPGA工…

Nginx内存池相关源码剖析(三)小块内存分配逻辑

在Nginx中,小块内存通常指的是那些大小相对较小、分配和释放频率较高的内存块。这些内存块由于数量众多、管理复杂,因此需要使用一种高效的内存管理机制来减少内存管理的开销和内存碎片的产生。 Nginx内存池通过一种预分配和复用的方式来管理小块内存。当…