0
点赞
收藏
分享

微信扫一扫

Java 什么是面向对象(OOP)

洒在心头的阳光 2022-04-03 阅读 184
java

什么是OOP?

是Object Oriented Programming,就是面向对象的编程啊,还有OOD(面向对象的设计),OOA(面向对象的分析)。那什么是面向对象呢?要想了解这个问题我们要先了解面向过程,这样对比我们就好理解了。

我想对学生数据进行分析,此时就可以将与之相关的现实事物关系抽象出来,将其抽象成类,通过继承,实现,组合的方式将其容纳在一起,这样就是面向过程。

【举个栗子】

我要去上数学课。

面向过程是将任务拆成几个步骤:

  • 1.拿笔、课本和作业
  • 2.背书包
  • 3.走到教室坐好
  • 4.听老师讲数学课

面向对象会拆解出人和老师两个对象

  • 人:拿笔、课本和作业,背书包,走到教室坐好。
  • 老师:讲数学课。

从上面列子能看出,面向过程比较直接高效,而面向对象更易于复用、扩展和维护。

面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。

面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了。

由此可见面向对象在应用种就更加方便,不需要知道是怎么做的,这样降低了耦合性。如果想换个去玩儿的目的地也不用这么繁琐的去改变流程,提高了可维护性。所以面向对象的优势就是:降低耦合性,提高维护性。

面向对象的三个特征:

1.封装:

隐藏对象的属性和实现细节,仅对外提供公共访问方式。将变化隔离,便于使用,提高复用性和安全性。

2.继承:

继承基类的方法,并做出自己的改变和扩展。提高代码复用性;继承是多态的前提。
子类共性的方法或属性直接使用父类的,而不需要自己再定义,只需扩展自己个性化的。

3.多态:

基于对象所属类的不同,外部对同一个方法的调用,实现执行的逻辑不同。
继承,方法重写,父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。

父类类型 变量名  = new 子类对象
变量名.方法名();

无法调用子类特有的功能

创建对象的内存分析

栈(stack)

Java栈的区域很小 , 大概2m左右 , 特点是存取的速度特别快

栈存储的特点是:先进后出

堆存储的是:

基本数据类型的数据以及引用数据类型的引用!

例如:

int a =10; 
Person p = new Person();

10存储在栈内存中 , 第二句代码创建的对象的引用储存在栈内存中。

堆(heap)
存放的是类的对象 ;

Java是一个纯面向对象语言, 限制了对象的创建方式 :

所有类的对象都是通过new关键字创建

new关键字, 是指告诉JVM , 需要明确的去创建一个新的对象 , 去开辟一块新的堆内存空间:

堆内存与栈内存不同, 优点在于我们创建对象时 , 不必关注堆内存中需要开辟多少存储空间 , 也不需要关注内存占用时长。

堆内存中内存的释放是由GC(垃圾回收器)完成的

垃圾回收器回收堆内存的规则 :

当栈内存中不存在此对象的引用时,则视其为垃圾 , 等待垃圾回收器回收 !

例如:

Person p0 = new Person(); 
Person p1 = p0; 
Person p2 = new Person(); 

小结

  • 抽象会使复杂的问题更加简单化。
  • 从以前面向过程的执行者,变成了张张嘴的指挥者。
  • 面向对象更符合人类的思维,面向过程则是机器的思想
举报

相关推荐

0 条评论