网站首页 > 技术文章 正文
今天我们来深入了解面向对象中的—对象
首先现实世界的对象就是存在的一个实体,就像我们人,电脑,桌子等等,这些都是对象。
对象分为成静与动两个部分
静的部分称之为属性:
像身高,体重,性别,三围什么的!
(就是属性面板里的血量,物抗,魔抗,攻击力什么的!)
动的部分称之为行为:
走,说话,吃饭等等!
(就是操作面板里的移动,释放技能什么的!)
如果你说你还是看不懂,
来我们加下好友
带你装逼,带你飞带你深入了解面向对象!
那么类呢?
是对具有共性事物的抽象描述!
就像我们总说我们是人类
人类就是一个抽象的概念定义,
这类人共有的属性和行为。
我们就是人类这个类中的一个实例化的实体
那么,现在我们就来创建一个Person类吧!
现在我们定义一个Person类
一个标准的吃货
他有两个属性
名字( String 类型)和年龄( int 型)
一个行为 :吃( eat )
这张图就是展示一下我们的包结构,
以及代码的调用和运行结果。
(让我们的小张教主变成吃货了!)
储存
那么现在娜姐就带领小伙伴来了解
对象是如何存储的。
首先,我们要先在脑海中建立一个堆和栈的概念
两个都是用来存储信息的
但是这个堆的空间要比我们的栈的空间大得多
(记得之前听过一个段子,栈和队列的区别是啥? 吃多了拉就是队列;吃多了吐就是栈!)
当我们声明一个对象:
Person p1;
的时候我们就在我们的栈中开辟一个空间,
叫p1没有初始化所以里面是空的
之后我们要对p1进行初始化
p1=new person;
new 创建实例在堆中开辟一块空间
把Person类中的属性和方法统统初始化
并把这块空间的地址
存在我们的p1开辟的栈中。
对象地址已经给你咯
这样我们就可以根据我们的p1地址来找到我们堆中的空间进行设置。
p1.age =18;
我们可以这样理解
声明对象:我需要一个冰箱。
(在房间里找个可以放冰箱的地方)
实例化对象:我已经买好了
(冰箱位址位址确定了,里面是空的)
给对像的属性赋值:放东西呀!
(在冰箱的里面放西瓜、冰淇淋等等)
(晚上吃西瓜真舒服!)
怎么样这个例子虽然不是恰当
但是这是我能想到最好的了!
下面是面向对象程序设计的特点!
封装
即对外隐藏对象的内部具体实现
并开放出若干个可以操作的入口来访问数据。
封装即对要操作的实体进行隐藏
使原始功能对外不可见
通过其他方法间接的操作真实的实体。
就好像我们在打游戏的时候
只要通过鼠标,键盘实现一些功能就好了。
(像移动,释放技能什么的!)
至于是如何实现的我们无需知道
就算知道实现原理对与我们玩游戏也没什么用。
采用这种封装的思想就可以提高我们的程序的可维护性。
那么如何控制我们的内容隐藏起来了呢?
就是下面的关键字了
作用域 | 当前类 | 同一package | 子孙类 | 其他package |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
省略不写 | √ | √ | × | × |
private | √ | × | × | × |
看到没有上面这个表就是关于权限的关键字
那我们就可以把不想别人动的属性私有化以上面的代码为例!
像这样私有化外面就用不了。
然后我们提供set(设置) get(获取)方法
我们就可以通过这样的方式来设置属性,获取属性。
有些东西我不想你用,就可以不提供方法
就是这么任性!
我们定义的对象属性是以成员变量的形式存在
我们定义的对象方法(行为)以成员方法存在
除去这两点还有一种方法
类的构造方法
功能主要是完成对象的初始化。
当类实例化一个对象时会自动调用构造方法
注意:
1.构造方法是特殊的成员方法,它与类同名,在对象实例化时由虚拟机自动调用;
2.它没有返回值类型,也不能有返回值;
3.每个对象在生成时都必须执行构造方法,而且只能执行一次;
4.如果构造方法调用失败,那么对象也无法创建;
5.在没有定义构造方法的情况下,类会自动产生一个无参数的默认构造方法,这个默认的构造方法什么都不做
7.一旦显式地定义了构造方法,默认构造方法自动消失;
方法重载
方法重载是让类以统一的方式
处理不同类型数据的一种手段
Java构造方法的重载
就是在类中可以创建多个构造方法
但具有不同的参数列表
(这一点和普通方法的重载是一样的)
调用时通过传递参数的不同来决定具体使用哪个构造方法
举个例子
我们定义了一个方法吃饭
然后我们会根据上的不同菜品(参数)
选择不同的方法
西餐用刀
叉
喝汤用勺
吃面用筷子
...
当然你要是让我用代码表示出来
我是拒绝的只能给你一个原理!
这里简单的举一个加法的方法重载
方法名一样都是 add
但是输入的参数不同
我们调用的方法就不一样
在外面看来我们就是只用了add方法
这就是方法重载
猜你喜欢
- 2024-09-18 面试时被问到单例模式,怎么回答才能让面试官眼前一亮?
- 2024-09-18 JVM系列之:对象的锁状态和同步(对象锁和方法锁)
- 2024-09-18 心理测试:四个卫生间你会选择哪一个,测出你是一个怎样的人!
- 2024-09-18 用这个方法,发现你命中注定的另一半
- 2024-09-18 Mybatis为什么查询结果为空时返回值为NULL或空集合?
- 2024-09-18 ES6对象拦截器 Proxy(electron拦截请求)
- 2024-09-18 求教!CAD多段线在布局视口中变成了“空心”,怎么办
- 2024-09-18 张明楷刑法笔记(13-15)结果、因果关系、结果归属
- 2024-09-18 Mybatis查询结果为空时,为什么返回值为NULL或空集合?
- 2024-09-18 一个单相思的女孩,写给暗恋对象的信
- 1513℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 561℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 506℃MySQL service启动脚本浅析(r12笔记第59天)
- 485℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 483℃启用MySQL查询缓存(mysql8.0查询缓存)
- 463℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 443℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 440℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)