文章目录

  • 前言
  • 一、抽象(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)类的设计与应用分析相关推荐

  1. Java设计模式-工厂模式(3)抽象工厂模式

    在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...

  2. java设计模式3,里氏替换原则

    目录 一.里氏替换原则定义 二.里氏替换原则的作用 三.违背原则场景 四.里氏替换原则改变代码 1.抽象人物类 2.哪吒子类 3.敖丙子类 五.关注公众号哪吒编程,回复1024,获取Java学习资料, ...

  3. 依赖倒置原则——举例说明Java设计模式中的依赖倒置原则

    依赖倒置原则--举例说明Java设计模式中的依赖倒置原则 一.前言 看官方定义 二.举例说明 2.1 例子介绍(无聊的可看看,着急的请跳过) 2.2 反例 2.1.1 反例1 (1)类图说明 (2)代 ...

  4. 里氏替换原则——举例说明Java设计模式中的里氏替换原则

    里氏替换原则--举例说明Java设计模式中的里氏替换原则 1. 前言 官方定义: 2. 举例说明 2.1 例子介绍 2.2 反例 2.2.1 类图说明 2.2.2 代码说明 2.2.3 测试 2.2. ...

  5. 接口隔离原则——举例说明Java设计模式中的接口隔离原则

    举例说明Java设计模式中的接口隔离原则 一.举例说明 1.反例 (1)类图说明 (2)代码说明 (3)测试 (4)分析缺点(总结) 2.正例 (1)类图说明 (2)代码说明 (3)测试 (4)方案评 ...

  6. 五子棋游戏Java代码简单实现(含活动图和类图设计)

    五子棋游戏Java代码简单实现(含活动图和类图设计) 文章目录 五子棋游戏Java代码简单实现(含活动图和类图设计) 活动图设计 类图设计 代码实现 总结 OOA和OOD设计 代码设计 可改进部分 活 ...

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

    文章目录 前言 一.什么是面向抽象编程? 二.传统场景的类设计 2.1.项目场景设计 2.2.传统类设计存在的问题 三.采用面向抽象编程的类设计 3.1.设计一个抽象类/接口 3.2.采用上转型对象/ ...

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

    文章目录 前言 一.接口(interface)的设计要点与抽象类的区别 二.接口(interface)的应用实例 2.1.创建一个接口(interface) 2.2.创建实现接口的类 2.3.通过接口 ...

  9. Java设计模式之工厂方法模式与抽象工厂模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.前期回顾 上一篇<Java设计模式之单例模式>详细介绍了单例模式,介绍了单例模式的使用场景,优缺点,同时也写了 ...

最新文章

  1. 科研 | Nature:新型土壤细菌具有多种合成次级代谢物的基因
  2. ELK结合logback搭建日志中心
  3. 如何垂直居中一个浮动元素
  4. codevs 1066 引水入城(DFS+DP)
  5. SUID + SGID + STICKY
  6. vue.js分页组件(新手学习记录)
  7. 15年来这8门编程语言位置十分稳定,C#从低谷开始爬升
  8. 上海大学计算机学院客座教授,刘云虹教授受聘上海大学外国语学院客座教授并做学术讲座...
  9. el-table使用fixed后,最后一行显示不全;el-table设置fixed后,最后一行被遮挡。
  10. PyTorch 1.0 中文文档:torch.onnx
  11. Jmeter 录制https(五)
  12. wordpress中如何正确书写robots.txt
  13. sqk,按分钟统计平均值
  14. 各种Windows版本下载
  15. vbs教程(1):弹窗
  16. 将货币转换为大写形式用c语言,C#:小写金额转换为大写
  17. 神经网络量化--per-channel量化
  18. 四步骤搞定专属PE系统【xitongshoucang.com】
  19. Qt设置按钮背景图片
  20. python发微信红包_微信公众号开发小记——5.python微信红包

热门文章

  1. 如何让Kubernetes集群生产可用?
  2. 移动端H5 腾讯地图sdk 当前位置 地址你解析 距离计算
  3. 通过接口操作MyBatis及数据库配置文件
  4. 点读笔客户端_新手妈妈如何选购点读笔
  5. 华为卡槽打不开怎么办_17500元!华为5G折叠手机刷屏,有人焦虑连夜开会…
  6. mysql报警代码183_mysql启动报错:/usr/bin/mysqld_safe: line 183: 23716 Killed
  7. BugkuCTF-WEB题alert
  8. java写入数组_如何在Java中将数组写入outputStream
  9. @bean注解和@component注解的区别_通过源码查看 @Component,@Service 等注解是如何被解析的...
  10. 易语言取c盘文件夹中的文件被占用,win7系统怎么快速找出文件被什么进程占用|win7解除文件占用的方法...