# 第六章 面向对象基础
# 封装
需求:人画圆,请针对这个需求进行面向对象设计
# 封装是什么?
告诉我们,如何正确设计对象的属性和方法
比如: 需求:定义一个类描述人
属性:姓名,年龄
行为:吃饭,睡觉
需求:人画圆,请针对这个需求进行面向对象设计
封装:面向对象三大特征之一
对象代表什么,就会封装对应的数据,并提供数据对应的行为
案例:人关门
# 封装的好处
对象代表什么,就得封装对应的数据,并提供数据对应的行为 降低我们的学习成本,可以少学、少记,或者说压根不用学,不用记对象有哪些方法,有需要时去找就行
# 总结
1.什么是封装?
- 告诉我们,如何正确设计对象的属性和方法
- 原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为
2.理解封装思想的好处?
- 让编程变得很简单,有什么事,找对象,调方法就行。
- 降低我们的学习成本,可以少学、少记,或者说压根不用学,不用记对象有哪些 方法,有需要时去找就行
# private关键字
案例:
找女朋友的案例
属性:姓名,年龄,性别
调用年龄属性并且赋值18
2
3
# private关键字是什么?
是一个权限修饰符
可以修饰成员(成员变量和成员方法)
被private修饰的成员只能在本类中才能访问
那如果说属性被私有化之后,怎么去调用属性呢?
# GetSet方法
针对每一个私有化的成员变量,都要提供get和set方法
get方法:对外提供成员变量的值
set方法:给成员变量赋值
public void setxxx(数据类型 变量){
}
2
3
public 返回值类型 getxxx(){
return xxx;
}
2
3
# 总结
1.private关键字是一个权限修饰符
2.可以修饰成员(成员变量和成员方法)
3.被private修饰的成员只能在本类中才能访问
4.针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作
5.提供“setXxx(参数)”方法,用于给成员变量赋值,方法用public修饰
6.提供“getXxx()”方法,用于获取成员变量的值,方法用public修饰
# 就近原则和This关键字
# 就近原则
public class GirlFriend{
private int age;
public void method(){
int age = 10;
System.out.println(age);
}
}
2
3
4
5
6
7
思考一个问题,在这里age会输出什么?
public class GirlFriend{
private int age;
public void method(){
int age = 10;
System.out.println(this.age);
}
}
2
3
4
5
6
7
谁离我近,我就用谁
# 总结:
1.就近原则
2.this的作用?
可以区别成员变量和局部变量
# 构造方法
构造方法也叫作构造器,构造函数
作用:在创建对象的时候给成员变量进行赋值的
# 构造方法的格式
public class Student{
修饰符 类名(参数){
方法体;
}
}
2
3
4
5
特点:
1.方法名与类名相同,大小写也要一致
2.没有返回值类型,连void都没有
3.没有具体的返回值(不能由return带回结果数据)
执行时机:
1.创建对象的时候由虚拟机调用,不能手动调用构造方法
2.每创建一次对象,就会调用一次构造方法
# 构造方法注意事项:
1.构造方法的定义
如果没有定义有参构造方法,系统将给出一个默认的无参构造方法
如果定义了有参构造方法,系统将不再提供默认的无参构造方法
2.构造方法的重载
带参构造方法,和无参构造方法,两者方法名相同,但是参数不同,这叫做构造方法的重载
3.推荐的使用方式
无论是否使用,都需要无参构造方法,和带全部参数的构造方法
# 总结
1.构造方法的作用?
创建对象的时候,由虚拟机自动调用,给成员变量进行初始化的。
2.构造方法有几种,各自的作用是什么?
无参构造方法
有参构造方法
3.构造方法有哪些注意事项?
任何类定义出来,默认就自带了无参数构造器,写不写都有
一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写无参数构造器了
# 标准的JavaBean类
1.类名需要见名知意
2.成员变量使用private修饰
3.提供至少两个构造方法
无参构造方法
带全部参数的构造方法
4.成员方法
提供每一个成员变量对应的setXXX()/getXXX()
如果还有其他行为,也需要写上
完成云课构造方法练习
# 包
# 什么是包?
包就是文件夹,用来管理各种不同功能的Java类,方便后期代码维护
包名的规则:公司域名反写+包的作用,需要全部英文小写,见名知意,比如:cn.lanqiao.day1.demo1
cn.lanqiao.day1.demo1.Employee这个包名也被称为全类名
# 使用其他类的规则
使用其他类时,需要使用全类名
- 使用同一个包中的类时,不需要导包
- 使用java.lang包下的类时,不需要导包
- 其他的情况下都需要导包
- 如果同时使用两个包中的同名类,需要使用全类名
# 总结
1.包的作用?
包就是文件夹,用来管理各种不同功能的Java类
2.包名书写规则?
公司域名反写+包的作用,需要全部英文小写,见名知意
3.什么是全类名?
包名+类名
4.什么时候需要导包?什么时候不需要导包?
使用同一个包的类时,不需要导包
使用java.lang包中的类时,不需要导包
其他情况都需要导包
如果同时使用两个包中的同名类,需要使用全类名
# 权限修饰符
# 权限修饰符是什么?
是用来控制一个成员能够被访问的范围
可以用来修饰成员变量,方法, 构造方法,内部类
# 权限修饰符的分类
有四种作用范围由小到大(private<default(空着不写,缺省)<protected<public)
简单理解:
private 私房钱,只能自己用
default(缺省) 本包中使用
protected 受保护的
public 公共的
# 权限修饰符的使用规则
实际开发中,一般只用private和public
成员变量私有(private)
方法公开(public)
特例:如果方法中的代码是抽取其他方法中共性代码,这个方法一般也有私有
# 总结练习题
练习题一
请编写一个Java程序,定义一个Student类,该类具有name(姓名)和scores(成绩数组)两个属性。在Student类中,实现一个方法calculateAverageScore(),用于计算学生的平均成绩。然后,在主程序中创建一个Student对象,并为其分配一些成绩,最后调用calculateAverageScore()方法并打印出平均成绩。
练习题二
请编写一个Java程序,定义一个Car类,该类具有brand(品牌)、color(颜色)和wheels(车轮数组)三个属性。在Car类中,实现一个方法checkWheels(),用于检查车轮是否都是完好的(假设车轮数组中存储的是车轮的状态,true表示完好,false表示损坏)。然后,在主程序中创建一个Car对象,并为其分配一些车轮状态,最后调用checkWheels()方法并打印出检查结果