java面向对象
什么是面向对象编程?
Object Oriented Programming,简称OOP,即面向对象编程。和面向对象编程相对的是面向过程编程。
那么,什么才是面向对象编程?要想了解这个问题我们要先了解面向过程。
很早很早以前的编程是面向过程的,比如实现一个算术运算1+1 = 2,通过这个简单的算法就可以解决问题。但是随着时代的进步,人们不满足现有的算法了,因为问题越来越复杂,不是1+1那么单纯了,比如一个班级的学生的数据分析,这样就有了对象这个概念,一切事物皆对象。将现实的事物抽象出来,注意抽象这个词是重点啊,把现实生活的事物以及关系,抽象成类,通过继承,实现,组合的方式把万事万物都给容纳了。实现了对现实世界的抽象和数学建模。这是一次飞跃性的进步。
我记得以前在河南教育学院上学的时候,我们的老师讲这个,喜欢拿小汽车来做实例和比喻,然而当时听的云里雾里。三四年过去了,其实我一直都没能理解什么是面向对象编程。后来看到了一个大佬的博文,他是这么解释的:
举个最简单点的例子来区分面向过程和面向对象
有一天你想吃鱼香肉丝了,怎么办呢?你有两个选择
1、自己买材料,肉,鱼香肉丝调料,蒜苔,胡萝卜等等然后切菜切肉,开炒,盛到盘子里。
2、去饭店,张开嘴:老板!来一份鱼香肉丝!
看出来区别了吗?1是面向过程,2是面向对象。
面向对象有什么优势呢?首先你不需要知道鱼香肉丝是怎么做的,降低了耦合性。如果你突然不想吃鱼香肉丝了,想吃洛阳白菜,对于1你可能不太容易了,还需要重新买菜,买调料什么的。对于2,太容易了,大喊:老板!那个鱼香肉丝换成洛阳白菜吧,提高了可维护性。总的来说就是降低耦合,提高维护性!
面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。
面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了。
面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们使用的就是面向对象了。
面向过程和面向对象的区别:
面向过程
优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源。
缺点:不易维护、不易复用、不易扩展
面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程差
面向对象的本质
以类的方式组织代码,以对象组织(封装)数据
面向对象的三大特性
1、封装
隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
2、继承
继承的本质是对某一批类的抽象,从而实现对世界更好的建模;
extends指的是扩展,子类是父类的扩展
java只有单继承,没有多继承
继承是类与类之间的一种关系,除此之外,类和类之间的关系还有依赖,组合,聚合等
继承关系的俩个类,一个为子类(派生类),一个为父类(基类),子类继承父类,使用关键字extends来表示
子类和父类之间,从意义上来讲应该具有“is a”的关系
object类
在java中,所有的类都默认继承Object类;即object为所有类的父类
super
1super必须调用父类的构造方法,必须在构造方法的第一个
2super只能出现在子类或者子类的构造方法中
3super和this不能同时调用构造方法
与this的区别
代表的对象不同
this:指本身调用者这个对象
super:代表父类对象的应用
前提
this没有继承也能使用
super只能在继承条件才可以使用
构造方法
this();本类的构造
super():父类的构造
方法重写
注意:1方法名必须相同
2参数列表必须相同
3修饰符:范围可以扩大但是不能缩小;public>Protected>Default>private
4抛出的异常:范围,可以减小但不能扩大;ClassNOtFoundException-->Exception(大)
5子类的方法必须和父类的方法一致,方法体不同
6为什么需要重写
1父类的功能,子类不一定需要,或者不一定满足:
ctrl+o:快捷方法重写
3、多态
父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。
多态即是同一方法可以根据发送对象的、不同采取不同的行为方式
一个对象的实际类型是确定的,但是可以指向对象的引用的类型有很多
多态存在的条件
有继承关系
子类重写父类方法
父类引用指向子类对象
注:多态是方法的多态,属性没有多态性
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具