首页 > 编程语言 >从本我出发,窥视java面向对象之本源

从本我出发,窥视java面向对象之本源

时间:2024-10-13 20:47:10浏览次数:3  
标签:从本 实现 接口 面向对象 Java java 抽象类 方法

掀开面向对象的神秘面纱,我们到底该如何深入理解java的面向对象?

1. 故事从一个小场景开始:

是夜,月黑风高,你单枪匹马独自一人来到幽暗森林,想要去窥探java那神秘而充满好奇的世界。突然,眼前一个黑影一闪而过,你顿时血压飙到250,一句“卧槽”脱口而出,心里害怕极了。“刚刚那玩意到底是人是鬼?”,你不禁问自己。还没等你回过神来,一道闪电划破长空,刹那间你瞥见正前方一颗千年老槐树下似是模模糊糊有一人影,它它正在向你徐徐走来。你慌乱之下一不小心顺手掏出火折子擦亮。但见那人影一袭红衣,隐隐约约身材窈窕,似是个妙龄女子。你松了一口气,一颗悬着的心瞬间放了下来。你也向她走去,慢慢地你终于能有机会窥视下她的真面目了:她年约二八,一双眼睛大而深邃有神,眉宇间充满灵气,唯一美中不足的是她戴了一层薄薄的面纱,但纵使这样也能看出她笔直挺拔的鼻子,性感而又具有野性魅力的小嘴,嘴角微微上翘,似是对你微笑亦或是对你惊讶。好了,刹车了,此处省略10000字…。

2. 用java的思维来抽象出以上场景:

在这里插入图片描述
如上图所示:

  1. 将第一次出现的黑影定义为一个接口-Shadow:因为只看见一团黑影,可能幻化出无数各种的东东;
  2. 将第二次出现的黑影定义为一个抽象类-Blacker:走进了,稍微有点感觉了,但还是有点模糊;
  3. 将人影定义为一个普通类Monster,创建一个Monster的实例亢金龙:最近看清楚了,是一个美女:她叫亢金龙,有具体的特点(名字,年龄,眼睛,嘴等)和行为(冲你媚笑,向你徐徐走来等)。
    以上就是,面向对象的一个基本思维思想过程。
    下面来比较官方和正经地梳理下面向对象。

深入理解面向对象

面向对象的基本概念

面向对象是一种程序设计方法或规范,基本思想是使用对象、类、继承、封装、多态等来进行程序设计。面向对象有类和对象(也叫实例)两个基本要素:

  1. 类:类是对现实生活中一类具有共同属性和行为的事物的抽象。在Java中,类用于定义对象的属性和行为。类是一个抽象的概念,类似于某类事物的模板,如上面小故事中的Monster。
  2. 对象:对象是上述类的一个实例,具有具体的属性和行为,如上面小故事中的亢金龙,有具体的特点(名字,年龄,眼睛,嘴等)和行为(冲你媚笑,向你徐徐走来等)。

类的结构和特征

  1. 类的结构:类由属性(成员变量)和行为(成员方法)组成。类还包括构造方法,用于创建对象并初始化对象的属性。
  2. 封装:封装是面向对象的三大特征之一(封装、继承、多态)。封装将类的内部细节隐藏起来,对外提供访问的接口,如上面小故事中的幽暗森林,它有一个入口(可以定义为方法或者接口)。Java通过访问修饰符(此文不讨论访问修饰符)来实现封装。封装的目的是保护对象的内部状态,防止外部直接访问和修改对象的数据,确保数据的完整性和程序的安全性。同时,封装使得类的实现细节对外部代码不可见,提供了更好的抽象性和模块化。
    3.继承:继承是面向对象编程中实现代码复用的重要手段。子类可以继承父类的属性和行为,从而避免重复定义相同的代码,说白了就是省事,复用功能相同的代码。继承的目的是促进代码的复用和模块化。通过继承一个基类,子类可以继承基类的所有特性,同时还可以添加新的特性或覆盖基类中的方法。多态的目的是使程序设计更加灵活,可以对不同的数据类型进行统一处理。多态性允许不同类的对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用不同的处理方式。
  3. 多态:多态是指同一个动作(类或者实例的方法)作用于不同的对象时产生不同的行为,如同样是吃喜好,猫喜欢吃鱼,狗喜欢吃肉,奥特曼喜欢打小怪兽。多态主要通过方法重载和接口实现。

普通类,抽象类,接口之间的关系

在这里插入图片描述
如上图所示,在Java中,普通类、抽象类和接口之间存在着紧密的联系与明确的区别。它们各自扮演着不同的角色,共同构成了Java面向对象编程的基础框架。
1.普通类(Class)
–定义:普通类是Java中最基本的类,它可以包含成员变量、方法、构造函数等,并且可以被实例化,即可以被创建出很具体的对象出来,如上小故事中的亢金龙。
–特点:普通类提供了具体的实现,可以被其他类继承,也可以实现接口,如上小故事中的亢金龙,即可以继承Monster中的方法和属性,也可以实现shadow这个接口。
2.抽象类(Abstract Class)
–定义:抽象类是一种特殊的类,它不能被实例化,但可以作为其他类的父类。抽象类中可以包含抽象方法和具体方法,如上图中的黑影,不能将其实例化,因为你根本不知道它会呈现什么属性和方法,是人是鬼搞不清楚。
–特点:抽象方法没有方法体,必须由子类实现。抽象类可以包含成员变量、构造方法、具体方法、抽象方法等。一个类只能继承一个抽象类(Java的单继承特性)。抽象类主要用于定义类的结构,提供部分实现,并允许子类继承并补充完整实现。
3.接口(Interface)
–定义:接口是一种完全抽象的类型,它只包含方法的声明(即方法签名),不包含方法的实现。如上面小故事中的Shadow,高度抽象,你对此一无所知,想不出来具体的属性和方法,没办法实例化。
–特点:接口中的方法都是抽象的,必须由实现类提供具体实现(在Java 8及以后,接口可以包含默认方法和静态方法,但这些方法仍然有特定的规则)。接口中的成员变量默认为public static final,即常量。接口不包含构造方法,因为接口不能被实例化。一个类可以实现多个接口(Java的多实现特性)。接口主要用于定义类的行为,提供一组相关的方法签名,由实现类提供具体实现。
4. 继承与实现:
–普通类可以继承抽象类,并必须实现抽象类中所有的抽象方法(除非它自身也是抽象类)。
–普通类和抽象类都可以实现接口,并必须实现接口中所有的方法(在Java 8及以后,可以选择实现部分默认方法,但仍然需要实现所有非默认方法)。
5. 抽象类与接口的结合:
–抽象类可以包含接口作为成员变量或方法返回类型。
–接口可以包含抽象类作为方法的返回类型或参数类型(但接口不能直接包含抽象类的实例,因为接口不能被实例化)。
6.Java 8及以后的变化:
–在Java 8及以后的版本中,接口可以包含默认方法和静态方法,这增加了接口的灵活性和功能性。

从现代哲学角度理解面向对象

  1. 面向对象的哲学本质
    面向对象方法本质上描述的是事物之间的一种关系,最主要的是因果关系,代表的是事物之间的独立、平等关系。它强调对问题空间的自然分割,以更接近人类思维的方式建立问题域模型,从而实现对客观实体的结构模拟和行为模拟。这种思想体现了人类对世界的认知过程,即从复杂到简单、从具体到抽象、从个别到一般的归纳和演绎过程。
  2. 面向对象与哲学的联系
    本体论:面向对象哲学与本体论有着紧密的联系。本体论探讨的是存在的本质和构成,而面向对象方法则通过类和对象的概念来抽象和表示现实世界中的实体和关系。在面向对象中,每个对象都是独立存在的实体,具有自己的属性和行为,这与本体论中的“实体”概念相吻合。
  3. 认识论:从认识论的角度来看,面向对象方法体现了人类对世界的认知过程。它通过对现实世界的抽象和表示,帮助我们更好地理解和解决问题。同时,面向对象方法也强调了对知识的封装和重用,这有助于我们提高认知效率和准确性。
  4. 方法论:面向对象方法不仅是一种编程技术,更是一种解决问题的哲学方法论。它强调以对象为中心来组织和管理系统,通过封装、继承和多态等机制来实现系统的模块化和可扩展性。这种方法论体现了人类对复杂系统的认知和管理能力,有助于我们更好地应对现实世界中的挑战。

从中国古代哲学角度理解面向对象

《道德经》里面有句话,我很喜欢,里面包含面向对象的思想。
原文为:“道生一,一生二,二生三,三生万物。万物负阴而抱阳,冲气以为和。”这句话揭示了宇宙万物的生成过程,以及阴阳相互依存、相互转化的关系。类和对象的生成也遵循此过程:类派生出对象,从抽象到具象,从共性到特性,从一而二,从佛像到众生相。就像上面小故事里的Shadow到亢金龙。

面向对象的三重境界:

  1. 第一重境界:表象的超越—看山是山,看水是水
  2. 第二重境界:本质的洞察—看山不是山,看水不是水;
  3. 第三重境界:返璞归真的领悟—看山仍然是山,看水仍然是水。‌
    这三重境界的绝妙之处只可意会,言传恐不达意。就像上面小故事中的你,随着境界的深入,最终Shadow的本源其实就是一个大美女-亢金龙。

本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。

标签:从本,实现,接口,面向对象,Java,java,抽象类,方法
From: https://blog.csdn.net/qq_45732829/article/details/142813943

相关文章

  • Educoder——JAVA高级特性 字节流-输入输出
    任务描述本关任务:使用输入输出流读写文件。相关知识为了完成本关任务,你需要掌握:1.如何使用输入流;2.如何使用输出流。输入流我们通过一个示例,来看看输入流应该如何使用,首先我们在D盘下创建一个hello.txt文件。输入文本HelloJavaHelloInputStream。在main方法中加入如......
  • 2024Java最新面试题总结(针对于一些小厂、中厂)
    这是根据个人面试经历总结出来的一些经验希望可以帮助到有需要的人。面试的时候,会先让你进行自我介绍,这个大家准备一两分钟的面试稿就可以。然后就是正式面试,面试官一般是两个人以上,开始,面试官会先提问一些基本知识,很基础,基本这个大家是没什么问题的,都可以回答应对。最重要的......
  • Java JWT:原理、机制及案例示范
    一、什么是JWT?1.1JWT的基本概念JWT(JSONWebToken)是一种用于在各方之间传递JSON格式信息的紧凑、URL安全的令牌(Token)。JWT的主要作用是验证用户身份或权限。它由三部分组成:Header(头部):标识令牌的类型和加密算法。Payload(载荷):包含了实际的身份信息及其他数据。Signature(签......
  • 高校宿舍管理系统的设计与实现(Java+ssm+万字文档+系统源码+数据库 +调试)
    摘 要本文是对高校宿舍管理系统的概括总结,主要从开题背景,课题意义,研究内容,开发环境与技术,系统分析,系统设计,系统实现这几个角度来进行本高校宿舍管理系统的阐述。高校宿舍管理系统运用Eclipse工具进行开发,使用Java语言进行编码,后台框架采用SSM框架(Spring框架、SpringMVC框......
  • 基于VUE+ssm框架的在线交友系统(Java+ssm+万字文档+系统源码+数据库 +调试)
    摘要本文介绍了在线交友系统的开发全过程。通过分析企业对于在线交友系统的需求,创建了一个计算机管理在线交友系统的方案。文章介绍了在线交友系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。本在线交友系统管理员功能有个人中心,用户......
  • Java日总结 --- JDBC
    JDBCAPI---StatementDDL为对数据库和表的增删改查操作,DML是对数据的增删改操作,DQL是对数据的查询操作Statement对象中的executeUpdate(sql)方法为执行sql语句的操作,同时该方法会返回一个值,为受影响的行数,也就是执行语句的条数当执行的是DML语句时,可以通过返回值是否大于......
  • JAVA毕业设计189—基于Java+Springboot+vue的自动售水机管理系统(源代码+数据库+13000
    毕设所有选题:https://blog.csdn.net/2303_76227485/article/details/131104075基于Java+Springboot+vue的自动售水机管理系统(源代码+数据库+13000字论文+任务书)189一、系统介绍本项目前后端分离(可以改为ssm版本),分为用户、员工、管理员三种角色1、用户:注册、登录、......
  • Java中的Iterator接口,以及HashSet和TreeSet
    在Java编程中,`Iterator`接口是一个非常重要的概念,它为我们提供了一种统一且方便的方式来遍历集合(如`List`、`Set`、`Map`等数据结构中的元素,不过遍历`Map`时稍显特殊,通常是遍历其键值对的集合视图)。##一、Iterator接口的定义与方法`Iterator`接口位于`java.util`包中,它定义......
  • StringUtils Java字符串工具类
    在我们的代码中经常需要对字符串判空,截取字符串、转换大小写、分隔字符串、比较字符串、拼接字符串、使用正则表达式等等。如果只用String类提供的那些方法,我们需要手写大量的额外代码,不然容易出现各种异常。现在有个好消息是:org.apache.commons.lang3包下的StringUtils工......
  • [vue3 JavaScript CSS]实现电商网站商品预览,图片放大镜功能
    da效果预览:当鼠标浮在图片上时,灰色小框跟随鼠标运动。右侧大图显示。灰色框不会跑出图片,鼠标移动,右侧大图相应跟随移动。实现思路在实现前,我们想梳理一下我们要实现什么功能灰色框跟随鼠标移动,注意处理边界情况当鼠标进入时右侧大图出现,鼠标移出时右侧大图消失鼠标向左......