2022-07-19 第10组 蒋萍 面向对象(2)类与类的关系和封装
面向对象(2)
1、类与类之间的关系
1.1 use……a(行为使用关系)
人使用工具,这个工具不属于人,不是人的属性
人和工具是使用关系
// 旅游要用车
public void travel(Car car){
// 这里Car 型的car和String型的str用法一样,作为局部变量,还没赋值而已
// 变量没有赋值也可以调用方法
}
- 类是引用类型,当不理解我们自己创建的引用数据类型时,就参考String
1.2 has ……a(拥有关系)
人拥有自己的眼睛,是人自己的属性
是属于关系
// 有个人一出生,就有年龄,还拥有一直猫
int age;
Cat cat;
public Person(int age,Cat cat){
this.age = age;
this.cat = cat;
}
public Person(int age){
this.age = age;
}
// 这个人一旦创建出来,就有对应的年龄和猫
Person person = new Person(20,cat);
Person person2 = new Person(20);
什么时候需要用构造器去赋值,就看创建对象是为了干什么,如果是为了调用这个类的方法,建议使用无参构造
如果创建对象需要使用到对象的某个属性,可以使用构造器赋值;
1.3 is……a (继承关系)
2、 this关键字
this
代表当前类的对象,this
就代表当前方法的调用者
this
既可以调方法也可以调属性,它实际上和对象的作用是一样的
2.1.1 构造器的调用
this
调用构造器:this();
(不推荐使用)this
调用构造器的要求:必须在构造器中才能调用构造器;
还得必须放在第一句;
-
this
不能用在static
修饰的方法中,static是类层面的,对象没造出来就有了,this是对象层面的,先有类才能有对象; -
构造器一般用来赋值,尤其是构造器赋值;
3、 封装
要知道为啥这么干? —— > 整合框架、让代码更整洁
代码层面、思想层面
https://www.cnblogs.com/fulfill/p/15987237.html
3.1 封装步骤
-
1、属性私有化(private)
-
2、提供一个公有的set,get方法
getter方法可以按照客户期望返回格式化的数据
setter方法可以限制和检验setter方法传入的参数是否合法,隐藏对象的内部结构
3.2 正确定义一个类(规矩):
所有属性私有化
每个属性都有对应的getter和setter方法
3.3 简单案例:
在Dog类中,加入属性name 和 age,当用户传入的数据不合法,不建议在构造方法里使用条件判断
用封装:
测试类:
运行结果:
其他
-
保证每个类都有无参构造器
-
当发现一堆代码要重复使用时,要想到把一堆的方法封装成一个类
-
异常:
空指针异常:NullPointerException
引用数据类型的默认值,初始值是null
总结:
1、this关键字通常用在构造器赋值,set方法赋值,当形参名和成员变量名相同时,赋值操作
2、封装
-
思想:把一堆代码封装成方法,把一堆执行操作的方法封装成类
-
代码:用代码实现封装
3、以后我们的赋值操作:
-
不再使用对象.属性的方式
-
使用构造器
-
setter方法
-
习惯:保证每个类都有无参构造器
写在最后
今天最大的感受就是,,,,,要多敲,敲敲敲
思想是掌握了,代码敲得还是不熟练唉!!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY