JAVA 面向对象 类 对象 封装

面向对象概念

在学习面向对象之前,我们可以先了解一下面向过程。
面向过程是一种编程思想,它强调的是过程,意思是我们做任何事,都需要亲力亲为。
面向对象也是一种编程思想,相对于面向过程,我们的身份可以由原来问题的执行者变为指挥者,进而把生活中很多复杂的问题变得简单化。

面向过程强调的是过程,比如,把大象装冰箱,一共分3步:
第1步:打开冰箱门
第2步:把大象放进去
第3步:关上冰箱门
而面向对象强调的是结果,比如:
谁负责把大象装进去?
有没有发现,如果是面向对象的话,干这件事的主体并不是你自己,你变成了一个指挥者?

再比如,衣服脏了,我们可以让女盆友帮忙洗,不需要关注中间过程是怎么洗的,就可以拿到干净的衣服,当然,这首先需要有一个对象(加油哦)~

还有,当我们想吃一道菜,其实并不需考虑这道菜是怎么做的,怎么送达的,只需点菜即可.传菜和做菜都有具体的对象来完成具体的功能.我们不需要关注实现的过程,只需要关注结果就好。
在这里插入图片描述

这就是我们所说的面向对象的编程思想(OOP,Object Oriented Programming)

如果面试官问什么是面向对象?你答万物皆对象!额,不建议这样做哈,因为我们还没到大佬的这个高度,还是最好举例。
就像是你说 : 空即是色 色即是空…信你个鬼鬼

2 面向对象的三大特征

  1. 封装: 把相关的数据封装成一个“类”组件
  2. 继承: 是子类自动共享父类属性和方法,这是类之间的一种关系
  3. 多态: 增强软件的灵活性和重用性

3 类和对象

3.1 类

  1. Java语言最基本单位就是类,相当于类型。
  2. 类是一类事物抽取共同属性与功能形成的。
  3. 可以理解为模板或者设计图纸。
    注意:类在现实世界并不存在,它只是一种对象的数据类型

3.2 对象

每个对象具有三个特点:对象的属性,对象的功能和对象的标识。

  1. 对象的属性用来描述对象的基本特征。
  2. 对象的功能用来描述对象的可以完成的操作。
  3. 对象的标识是指每个对象在内存中都有一个唯一的地址值用于与其他对象进行区分,类似于我们的身份证号。

3.3 类和对象的关系

  1. 我们先创建类,再通过类创建出对象
  2. 我们可以通过一个类创建出多个对象
  3. 类是抽象的,对象是具体的

3.4 练习:类的创建使用

在编写代码之前,我们需要分析下需求:
比如我们要把手机这一类事物抽象成代码:
那么这个事物的类型就是"手机",可以用类来描述.
类中包含的就是手机抽取出来的共性的属性与功能.

手机的属性:颜色,尺寸,品牌,价格
手机的功能功能:打电话,发短信,听音乐

3.5 对象在内存中的存储

Java把内存分成5大区域,我们重点关注栈和堆。

  1. 一般来讲局部变量存在栈中,方法执行完毕内存就被释放
  2. 对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放
  3. 每个堆内存的元素都有地址值
  4. 对象中的属性都是成员变量,是有默认值的
    TIPS: 栈与队列指的是一种数据的结构。
    栈:先进后出(FILO – First In Last Out)
    队列:先进先出(FIFO – First In First Out)
    在这里插入图片描述
    在这里插入图片描述

对象的创建过程分析:

Phone p = new Phone(); 这句代码,再内存中会发生什么呢?
1.在栈内存中开辟一块空间,存放引用类型Phone类型的变量p
2.在堆内存中开辟一块空间,存放Phone类型的对象
3.要给这个对象进行初始化,比如:String brand = null;
4.当对象准备好以后,会生成一个唯一的地址值,然后将此地址值交给引用类型的变量p来保存
5.如果以后想要操作此对象的各种资源,可以通过p变量保存的地址值找到该对象,比如:p.call(); p.price = 66.6;
在这里插入图片描述

在这里插入图片描述
p2.brand = “HUAWEI”;
就是先到栈内存中找到p2中保存的唯一的地址值
然后根据地址值找到对应的Phone对象,并对其对应的属性值进行修改
p2.eat();
也是先到栈内存中找到p2中保存的唯一的地址值
然后根据地址值找到对应Phone对象,执行Phone对象的eat()方法

4 封装

4.1 概述

封装是隐藏对象的属性和实现细节,仅仅对外提供公共的访问方式,比如类和方法
好处:

  1. 提高安全性
  2. 提高重用性

4.2 private关键字

是一个权限修饰符 ,可以用来修饰成员变量和成员方法.被私有化的成员只能在本类中访问

6 访问控制符

用来控制一个类,或者类中的成员的访问范围。
在这里插入图片描述
TIPS:default是表示不写修饰符,默认,如果写default单词来修饰会报错

拓展7 匿名对象

没有名字的对象,是对象的简化表示形式。
使用场景:
当被调用的对象只调用一次时(多次会创建多个对象浪费内存)
Demo d = new Demo();
d.sleep();
d.game();
//这个d就是对象的名字。
也可以写成:
new Demo().show();//创建了一个对象调方法
new Demo().game();//又创建了一个对象调方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值