Java 设计模式 Day1 之面向抽象原则:抽象(abstract)类的设计与应用分析

文章目录

  • 前言
  • 一、抽象(abstract)类的设计要点
  • 二、抽象类的应用实例
    • 2.1、创建一个抽象类
    • 2.2、创建抽象类非抽象子类
    • 2.3、通过上转型对象调用子类方法
  • 总结


前言

面向抽象原则是面向对象四大基本原则的第一条,其重要性不言而喻,面向抽象原则分为抽象(abstract)类和接口(interface)以及面向抽象编程,由于篇幅有限本文我们主要细说抽象(abstract)类的设计与应用,并通过引入具体案例的形式使概念更便于理解。

在这里插入图片描述


一、抽象(abstract)类的设计要点

  • 抽象类中可以有 abstract 方法,也可以有非 abstract 方法。
  • 抽象类不能用 new 运算符创建对象。
  • 抽象类的子类必须重写父类的 abstract 方法,在子类中将 abstract 方法重新声明,但必须去掉 abstract 修饰符,同时保证声明的方法名字、返回类型、参数个数和类型与父类的 abstract 方法相同。
  • 抽象类创建的对象可以作为上转型对象。抽象类虽然不能使用 new 运算符创建对象,但是由于非 abstract 子类必须重写父类全部 abstract 方法,所以可以让抽象类声明的对象成为子类对象的上转型对象,并可以调用子类重写的方法。

二、抽象类的应用实例

2.1、创建一个抽象类

首先我们创建一个抽象类 A,里面有一个 abstract 方法 int add(int x,int y),相应代码如下:

package com.bailu.principle;/** 面向抽象原则* 抽象类中可以有abstract方法,也可以有非abstract方法* 抽象类不能用new运算符创建对象*/
public abstract class A {public abstract int add(int x, int y);
}

2.2、创建抽象类非抽象子类

接着我们创建非抽象子类 B,继承父类 A,并且重写父类 A 中的 abstract 方法 int add(int x,int y),实现计算参数 x 与 y 的值,相应代码如下:

package com.bailu.principle;/** 抽象类的子类必须重写父类的abstract方法,在子类中将abstract方法重新声明,但必须去掉abstract修饰符,* 同时要保证声明的方法名字、返回类型、参数个数和类型与父类的abstract方法完全相同*/
public class B extends A {@Overridepublic int add(int x, int y) {return x + y;}}

2.3、通过上转型对象调用子类方法

我们假设 b 是 B 创建的对象,那么根据规则就可以让 A 类声明的对象 a 成为对象 b 的上转型对象,即让 a 存放 b 的引用。也就可以调用子类中重写的 int add(int x,int y) 方法,相应代码如下:

package com.bailu.principle;/** 抽象类虽然不能用new运算符创建对象,但是可以通过非abstract子类重写父类全部abstract方法* 这样就可以让抽象类声明的对象成为其子类的上转型对象,并调用子类重写的方法*/
public class Application {public static void main(String[] args) {A a;a = new B();// a是B类对象的上转型对象int m = a.add(1, 2);// a调用子类B重写的方法System.out.println(m);}
}

运行结果具体如下图所示:

在这里插入图片描述


总结

在本文给大家介绍了面向抽象原则概念中的抽象(abstract)类内容,并总结了在开发中抽象类的设计要点,通过引入具体的案例的形式进一步分析,可能有些同学对于其中上转型对象的概念比较突兀,在案例中具体分析之后也就容易掌握了。

在这里插入图片描述


我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!

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

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

相关文章

数据中心 PUE 优化模型生成服务:AI 浪潮下的数据中心的省钱攻略,就用这几招

文章目录前言一、数据中心节能能省一大笔钱1.1、全联接世界推动数据中心市场持续高速发展1.1.1、用户联接激增1.1.2、全球数据中心基础设施高速发展1.2、数据中心的增长带来超额的用电量1.3、数据中心节能是必然趋势1.4、什么是 PUE?1.5、数据中心制冷原理1.6、传统…

Eclipse 答疑:为什么 Eclipse 里面的鼠标光标变成了小黑方块?什么原因导致的?

文章目录前言一、问题产生场景二、问题原因分析2.1、问题直接诱因2.2、“Insert”按键作用分析2.2.1、插入(默认)状态解释及案例2.2.2、覆盖状态解释及案例三、对应解决方式总结前言 今天有一个学妹问我:学长,我的 Eclipse 太变态…

Java 设计模式 Day2 之面向抽象原则:接口(interface)的设计应用与抽象类的区别

文章目录前言一、接口(interface)的设计要点与抽象类的区别二、接口(interface)的应用实例2.1、创建一个接口(interface)2.2、创建实现接口的类2.3、通过接口回调调用被类实现的方法总结前言 面向抽象原则是…

Java 设计模式 Day3 之面向抽象原则:什么是面向抽象编程?面向抽象编程如何应用?

文章目录前言一、什么是面向抽象编程?二、传统场景的类设计2.1、项目场景设计2.2、传统类设计存在的问题三、采用面向抽象编程的类设计3.1、设计一个抽象类/接口3.2、采用上转型对象/接口回调调用子类方法3.3、重新设计子类/被实现类3.4、面向抽象编程的具体实现四、…

赢在 CSDN:我在 CSDN 的成长,“长风破浪会有时”,如何保证自己有持续写作的动力?

文章目录前言一、如何结缘 CSDN?1.1、我的“黑客之路”初探1.2、CSDN 一眼看得到的优势是什么?1.3、大学再遇 CSDN二、为什么开始在 C 站输出内容?2.1、“好记性不如烂笔头”2.2、记事本到“鼓励工具”三、C 站吸引我的地方是什么?3.1、海量…

华为工业云平台:制造业企业数据平台建设最佳实践分享

文章目录前言一、制造行业数字化转型和发展趋势1.1、制造行业数字化转型发展趋势1.2、制造行业数字化转型遇到的挑战1.3、政策牵引,加快数字化转型升级二、数字化转型-业务角度2.1、智能生产2.2、智能销售2.3、智能物流2.4、智能供应链2.5、智慧决策三、数字化转型-…

计算机本科毕业设计:毕业设计、论文要点及我们面对毕业答辩应持有的态度

文章目录前言一、对于毕业设计1.1、选题1.2、中期自查1.3、毕业设计答辩二、对于毕业论文三、我们应持有的态度3.1、人尽其才3.2、恪尽职守3.3、全力以赴3.4、做好自己总结前言 最近不断有很多学弟、学妹来找我咨询一些关于毕设、论文答辩的问题,一看日历四月份了&a…

Eclipse 答疑:Eclipse 使用 Amateras UML 创建类图点击 Finish 没反应解决方式汇总

文章目录前言一、问题产生场景1.1、Amateras UML 创建类图没反应二、问题原因分析三、问题定位及解决3.1、定位检查版本支持信息3.2、问题确认过程3.3、解决方式验证四、不想降低版本怎么办?总结前言 之前项目中在 Eclipse 使用 Amateras UML 创建类图点击 Finish 没…

DDoS 攻击与防护(二):DDoS 防护购买和使用入门指南,DDoS 防护服务有哪些应用场景?

文章目录前言一、如何选择 DDoS 高防和 DDoS 原生高级防护?二、如何购买和使用 DDoS 高防?2.1、购买 DDoS 高防2.2、DDoS 高防域名网站类业务接入流程2.3、配置防护域名2.4、上传证书2.5、选择实例和线路2.6、本地验证2.7、修改 DNS 解析2.8、放行高防回…

Java 大厂面试必刷题 Day1:何为面向对象编程的思想?面向对象三大特征是什么?

文章目录 前言一、何为面向对象编程的思想?二、面向对象的三大特征2.1、封装关系2.2、继承关系2.3、多态关系总结前言 从本文我们将开始《Java 大厂面试必刷题》系列的更新,Java 面试必刷题 Day1:何为面向对象编程的思想?面向对象三大特征是什么?这道题对于 Java 从业者来…

猿创征文|2022 互联网从业心得:“但愿人长久,千里共婵娟”,中秋先学会与自己内心团圆

文章目录前言一、“好雨知时节,当春乃发生”1.1、《性格修正:如何突破你的原生性格》1.2、“疼我孰知父母”1.3、“海内存知己,天涯若比邻”二、“读万卷书,行万里路”2.1、“读万卷书”2.2、“行万里路”三、“身体是革命的本钱”…

猿创征文|弹性云服务器 ECS:轻松上云第一步,如何根据应用场景购买和使用入门 ECS?

文章目录前言一、什么是弹性云服务器?1.1、ECS 介绍1.2、为什么选择 ECS?1.3、ECS 产品架构1.4、ECS 产品优势二、弹性云服务器的实例类型三、弹性云服务器的购买3.1、基础配置3.1.1、计费模式3.1.2、区域3.1.3、可用区3.1.4、CPU 架构3.1.5、规格3.1.6、…

猿创征文|不会代码也能玩开发?基于华为云 IoT 快速实现 0 代码体验物联网设备上云

文章目录前言一、物联网设备上云背景介绍二、实验环境准备三、智慧烟感器上云体验3.1、选择向导式极速体验3.2、对智慧烟感器进行产品定义3.3、定义目标设备标识码、注册设备3.4、根据需要选择设备演示包3.5、下载、解压设备演示包3.6、执行 bat 文件,运行设备演示包…

猿创征文|基于 AppCube 应用魔方:零代码手把手教你 5 分钟开发微信小程序

文章目录前言一、AppCube 应用魔方1.1、什么是 AppCube 应用魔方?1.2、为什么选择AppCube 应用魔方?二、项目实验环境与资源准备2.1、实验需求及环境介绍2.2、初次订购 AppCube2.3、曾订购过 AppCube三、进入 AppCube 全新零代码界面四、配置业务用户信息…

《软件质量保证与测试》第 6 章——系统测试 重点部分总结

文章目录 前言一、判断题二、简答题总结前言 软件质量保证是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或…

《软件质量保证与测试》第 9 章——测试自动化及其框架 重点部分总结

文章目录 前言一、判断题二、简答题总结前言 软件质量保证是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或…

java中间件是什么意思_数据库中间件漫谈

1.前言随着业务的发展,MySQL数据库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作的开销也会越来越大;另外,无论怎样升级硬件资源,单台服务器的资源(CPU、磁盘、内存、…

kafka多个消费者消费一个topic_kafka:一文读懂消费者背后的那点quot;猫腻quot;

来自:z小赵前言经过前几篇文章的介绍,大致了解了生产者背后的运行原理。消息有生产就得有人去消费,今天我们就来介绍下消费端消费消息背后发生的那点事儿。文章概览消费者与消费组的“父子关系”。Repartition 触发时机。消费者与 ZK 的关系。…

MySQL 入门教程:初学者一学就会,零基础 MySQL 安装及增删改查入门

文章目录前言一、MySQL 的相关概念介绍二、Windows 下 MySQL 的配置2.1、MySQL 安装配置步骤2.2、MySQL 服务的启动、停止与卸载三、MySQL 脚本的基本组成四、MySQL 中的数据类型4.1、数字类型4.2、日期和时间4.3、字符串类型五、使用 MySQL 数据库5.1、登录到 MySQL5.2、创建一…

四大基本反应类型的关系_如何进入四大的咨询部门?

在会计行业,人人梦寐以求的职位,莫过于四大的财务咨询的岗位,第一咨询工作很高大上,第二没有其他职位那么幸苦,我从我的工作经历来讲讲,我是怎么进入咨询这个“真香”岗位的。首先,给大家说一个…