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)类内容,并总结了在开发中抽象类的设计要点,通过引入具体的案例的形式进一步分析,可能有些同学对于其中上转型对象的概念比较突兀,在案例中具体分析之后也就容易掌握了。
我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!
Java 设计模式 Day1 之面向抽象原则:抽象(abstract)类的设计与应用分析相关推荐
- Java设计模式-工厂模式(3)抽象工厂模式
在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...
- java设计模式3,里氏替换原则
目录 一.里氏替换原则定义 二.里氏替换原则的作用 三.违背原则场景 四.里氏替换原则改变代码 1.抽象人物类 2.哪吒子类 3.敖丙子类 五.关注公众号哪吒编程,回复1024,获取Java学习资料, ...
- 依赖倒置原则——举例说明Java设计模式中的依赖倒置原则
依赖倒置原则--举例说明Java设计模式中的依赖倒置原则 一.前言 看官方定义 二.举例说明 2.1 例子介绍(无聊的可看看,着急的请跳过) 2.2 反例 2.1.1 反例1 (1)类图说明 (2)代 ...
- 里氏替换原则——举例说明Java设计模式中的里氏替换原则
里氏替换原则--举例说明Java设计模式中的里氏替换原则 1. 前言 官方定义: 2. 举例说明 2.1 例子介绍 2.2 反例 2.2.1 类图说明 2.2.2 代码说明 2.2.3 测试 2.2. ...
- 接口隔离原则——举例说明Java设计模式中的接口隔离原则
举例说明Java设计模式中的接口隔离原则 一.举例说明 1.反例 (1)类图说明 (2)代码说明 (3)测试 (4)分析缺点(总结) 2.正例 (1)类图说明 (2)代码说明 (3)测试 (4)方案评 ...
- 五子棋游戏Java代码简单实现(含活动图和类图设计)
五子棋游戏Java代码简单实现(含活动图和类图设计) 文章目录 五子棋游戏Java代码简单实现(含活动图和类图设计) 活动图设计 类图设计 代码实现 总结 OOA和OOD设计 代码设计 可改进部分 活 ...
- Java 设计模式 Day3 之面向抽象原则:什么是面向抽象编程?面向抽象编程如何应用?
文章目录 前言 一.什么是面向抽象编程? 二.传统场景的类设计 2.1.项目场景设计 2.2.传统类设计存在的问题 三.采用面向抽象编程的类设计 3.1.设计一个抽象类/接口 3.2.采用上转型对象/ ...
- Java 设计模式 Day2 之面向抽象原则:接口(interface)的设计应用与抽象类的区别
文章目录 前言 一.接口(interface)的设计要点与抽象类的区别 二.接口(interface)的应用实例 2.1.创建一个接口(interface) 2.2.创建实现接口的类 2.3.通过接口 ...
- Java设计模式之工厂方法模式与抽象工厂模式
2019独角兽企业重金招聘Python工程师标准>>> 一.前期回顾 上一篇<Java设计模式之单例模式>详细介绍了单例模式,介绍了单例模式的使用场景,优缺点,同时也写了 ...
最新文章
- 科研 | Nature:新型土壤细菌具有多种合成次级代谢物的基因
- ELK结合logback搭建日志中心
- 如何垂直居中一个浮动元素
- codevs 1066 引水入城(DFS+DP)
- SUID + SGID + STICKY
- vue.js分页组件(新手学习记录)
- 15年来这8门编程语言位置十分稳定,C#从低谷开始爬升
- 上海大学计算机学院客座教授,刘云虹教授受聘上海大学外国语学院客座教授并做学术讲座...
- el-table使用fixed后,最后一行显示不全;el-table设置fixed后,最后一行被遮挡。
- PyTorch 1.0 中文文档:torch.onnx
- Jmeter 录制https(五)
- wordpress中如何正确书写robots.txt
- sqk,按分钟统计平均值
- 各种Windows版本下载
- vbs教程(1):弹窗
- 将货币转换为大写形式用c语言,C#:小写金额转换为大写
- 神经网络量化--per-channel量化
- 四步骤搞定专属PE系统【xitongshoucang.com】
- Qt设置按钮背景图片
- python发微信红包_微信公众号开发小记——5.python微信红包
热门文章
- 如何让Kubernetes集群生产可用?
- 移动端H5 腾讯地图sdk 当前位置 地址你解析 距离计算
- 通过接口操作MyBatis及数据库配置文件
- 点读笔客户端_新手妈妈如何选购点读笔
- 华为卡槽打不开怎么办_17500元!华为5G折叠手机刷屏,有人焦虑连夜开会…
- mysql报警代码183_mysql启动报错:/usr/bin/mysqld_safe: line 183: 23716 Killed
- BugkuCTF-WEB题alert
- java写入数组_如何在Java中将数组写入outputStream
- @bean注解和@component注解的区别_通过源码查看 @Component,@Service 等注解是如何被解析的...
- 易语言取c盘文件夹中的文件被占用,win7系统怎么快速找出文件被什么进程占用|win7解除文件占用的方法...