昨天和同事聊到Java抽象的这个概念,今天想深入理解以下什么是Java中的抽象。

初识抽象

理解抽象,首先我们得理解抽象这个词本身的概念,那么什么是抽象?抽象这个词本身就很抽象。

在百度的解析是这么说的:

抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。具体地说,抽象就是人们在实践的基础上,对于丰富的感性材料通过去粗取精、去伪存真、由此及彼、由表及里的加工制作,形成概念、判断、推理等思维形式,以反映事物的本质和规律的方法。

其实说白了,抽象就是把事物的共同特征总结为一点。 他和具体又是相对的。就比如说“男人”对于“人类”是具体的,而“动物”对于“人类”又是抽象的。抽象---》抽出相同特征的对象,他也有个同义词叫归类。

编程中的抽象

其实所有编程语言的最终目的,都在于提供一个提供一个“抽象”的方法。在汇编语言中是对基础机器少量的抽象。后来许多的命令式语言(如FORTRAN,BASIC和C)又是对汇编语言的一种抽象。虽然比起汇编语言,这些命令式的语言已经有了进步,但是他的原理依然要求我们着重考虑计算机的结构而非问题本身的结构。在机器模型与解决的问题模型之间,程序员必须建立出一种联系。

面向对象的设计

其实面向对象的程序设计则跨出了一大步。其实每个对象都是一台都类似于一个小型的计算机。他们有着自己的状态,而且可以要求他们执行特定操作。相比于现实中的“物体”,“对象”也存在共通的地方,也有这自己的特征和行为。可以将面向对象总结为五个特征:

  1. 万物皆是对象。把对象想象为新型变量,它保存着数据,同时也可以自己操作自己。
  2. 程序由一堆对象组合。通过消息传递,各个对象之间知道自己该做什么。
  3. 每个对象有自己的存储空间,对象中可以容纳着其他对象。
  4. 每个对象都有一个类型。每个对象都是某个“类”的“实例”。“类”也就是“类型”,一个类最重要的特征就是“能将什么消息发给他”。
  5. 同一类的所有对象都能接收相同的消息。

Java中的抽象

理解Java中的抽象,我们不妨先看一段代码,这段代码分别计算了圆和矩形的面积,我们来看看传统的做法。

class Test
{public static void main(String[] args) {rectangle s1 = new rectangle(5,10);s1.GetArea();circle s2 = new circle(10);s2.GetArea();}
}
class rectangle
{   rectangle(double chang,double kuan){this.chang = chang;this.kuan = kuan;}double chang;double kuan;public void GetArea(){System.out.println(this.chang * this.kuan);}
}
class circle
{circle(double radius){this.radius = radius;}double radius;public void GetArea(){System.out.println(Math.PI * radius *radius);}
}

运用了抽象的方法之后。

class  Test{public static void main(String[] args) {rectangle s1 = new rectangle(5,10);s1.GetArea();circle s2 = new circle(10);s2.GetArea();}
}
abstract class Graph                       //定义抽象类
{abstract public void GetArea();            //定义抽象的方法
}
class rectangle extends Graph
{   rectangle(double chang,double kuan){this.chang = chang;this.kuan = kuan;}double chang;double kuan;public void GetArea(){System.out.println(this.chang * this.kuan);}
}
class circle extends Graph
{circle(double radius){this.radius = radius;}double radius;public void GetArea(){System.out.println(Math.PI * radius *radius);}
}

我们创建了一个抽象的(abstract)类Graph,因为它们有着相同的特征或目的,它们共同的目的都是计算面积,所以我们可以通过GetArea的方法来抽象出来。之后我们让矩形和圆形两个类继承Graph类,并实现对应的GetArea方法。这就是抽象啦。

我们可以看出我们可以通过继承我们的父类(这里父类也可以叫做抽象类,里面的方法也可以叫做抽象的方法),重写其中的方法或者引用父类的属性来实现我们代码的复用,这就是抽象思想给我解决的最大的问题-----实现代码的复用。

【Java进阶】到底什么是抽象?相关推荐

  1. java中到底什么是抽象?

    抽象Abstract:[新手可忽略不影响继续学习]    很多java 的书中都谈到了抽象abstract的概念,到底什么是抽象?马克-to-win:抽取关键相关特性(属性和方法)构成对象,用程序的方 ...

  2. 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)

    [JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...

  3. Java基础到Java进阶——Java小白的历练之路------从0到1,开卷!

    Java小白的历练之路------从0到1 title: Java Essay date: 2022-09-07 08:58:32 tags: Java notes 写在前面: 免责声明:本笔记来源自 ...

  4. 第十六讲 java进阶-API

    第十六讲 java进阶-重写equals方法的深度解读 1 接口的补充 接口为什么不能new对象?有没有必要new对象?或者是说如果能new对象,new出来的是什么东西?有什么内容,是否符合对象的特征 ...

  5. Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式

    本文介绍了Java中的四种I/O模型,同步阻塞,同步非阻塞,多路复用,异步阻塞.同时将NIO和BIO进行了对比,并详细分析了基于NIO的Reactor模式,包括经典单线程模型以及多线程模式和多Reac ...

  6. 安卓java模拟器_用大白话告诉你:Java 后端到底是在做什么?

    作者:黄小斜 阅读本文大概需要 6 分钟. 新手程序员通常会走入一个误区,就是认为学习了一门语言,就可以称为是某某语言工程师了.但事实上真的是这样吗?其实并非如此. 今天我们就来聊一聊,Java 开发 ...

  7. JAVA进阶教学之(集合)

    目录 1.集合概述 2.集合存储的数据类型 3.不同的集合,底层都会对应不同的数据结构 4.集合继承结构图(部分接口和类) 5.Collection接口中常用的方法 6.Collection 集合迭代 ...

  8. 干货!史上最全Java进阶好书清单来了!

    想学好Java,书籍是必不可少的学习工具之一了,尤其是对于刚入行的新手们来说.今天就给大家准备了一个Java进阶的好书清单: Java语言篇 1.<Java编程规范> 适合:初级.中级 这 ...

  9. java进阶基础---2.3---IO流的概念及示例

    小梁同学 の Java学习旅途 你好! 这是小梁同学使用 博客 所记录的文章笔记,作为一个初学者的从基础到未来的记录,如果你想和我一起在Java学习路程上坚持下去,欢迎你的关注与指正. 以下所有有关代 ...

  10. 阿里内部发布最新版Java进阶笔记,金九银十看这份文档就够了

    大家都说程序员这个职业薪资高.待遇好,现在是程序员"跳槽"的黄金时期,你准备好了吗?有没有给自己定个小目标?是30K.40K,还是更高?短期内提高Java 核心能力最快.最有效的方 ...

最新文章

  1. 函数依赖与 Armstrong公理
  2. 美国法官驳回特朗普工作签禁令:超出权职范围
  3. 【转载】回归模型的评价指标
  4. [云炬创业学笔记]第二章决定成为创业者测试8
  5. C语言循环为1404的循环,考试,求大神帮忙,C语言,小弟感激不尽
  6. 【csdn】markdown使用教程
  7. SWIFT显示底部的工具条
  8. 动态服务器值 回放报错 没有关联到_LR关联(带附件) - 缺1份淡定ㄣ - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  9. 教你用illustrator画十二色环
  10. Win10系统完全卸载52好压的方法
  11. Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码
  12. 关于axure的 中继器表格合计功能
  13. C#自定义好看的消息提示窗口MessageBox
  14. 刷程序对车危害_汽车刷程序对车有什么影响
  15. tpc-e mysql_mysql评测工具TPC-C使用
  16. 什么是域名服务器?域名服务器的作用是什么?
  17. 2023国自然已审核,预祝8月上榜
  18. 《第1阶段》——正交试验法
  19. axure没有团队页签_使用Axure管理团队项目以及分享原型
  20. 现在很多网友崇拜科学家,反对宣扬戏子,这是什么心态?

热门文章

  1. java 调用本地播放器_Java调用本地播放器播放视频文件
  2. 为什么有的计算机没有ppt,电脑上没有ppt怎么办
  3. linux下载navicat
  4. android面试基础总结
  5. 腾讯云cdn怎样接入域名
  6. EXCEL公式获取幂函数系数解析
  7. excel删除无尽空白行_Excel 快速删除空白行
  8. java方法的重写和重载_Java方法重载和重写原理区别解析
  9. 笔记本电脑插入耳机仍然外放(亲测有效)
  10. 如何删除360浏览器的桔梗导航