day06【类与对象、封装、构造方法】
一. 面向对象思想概述
1. 面向过程和面向对象
- 机器语言 M423 0000 0010
- 汇编语言 MOV 0 2
- 高级语言 C(面向过程), C++, Java(面向对象)
- 面向过程: 强调过程(强调做一件事其中的每一个步骤)
- 面向对象: 做一件事, 不自己做, 而是找对象来帮我完成
举例
-
面向过程: 拿盆子 >> 放衣服 >> 放洗衣粉 >> 倒水 >> 泡 >> 搓 >> 漂洗 >> 拧干 >> 晾起来
-
面向对象: 衣服放到洗衣机 >> 放洗衣粉 >> 按下开关 >> 晾起来
叫女朋友来帮我洗
二. 类与对象
- 重点掌握简易格式
1. 什么是类和什么是对象
- 类: 一类事物属性和行为的集合.
- 对象: 该类事物的具体体现.
2. 如何定义类
- 类: 就是Java中使用class定义出来的类.
- 属性(成员变量): 定义格式和以前的变量是一样的, 只是位置发生了改变, 在类中方法外.
- 行为(成员方法): 定义格式和以前基本相同, 只是去掉了static.
public class Person {
// 类中方法外
// 姓名
String name;
// 年龄
int age;
// 方法
// 吃饭
public void eat() {
System.out.println("人要吃饭");
}
// 睡觉
public void sleep() {
System.out.println("人要睡觉");
}
}
3. 如何创建对象和使用对象
创建和使用对象, 在测试类中的主方法中去创建和使用.
(1) 创建对象
// 类名 对象名 = new 类名();
// 创建了一个Person对象, 对象名是p
Person p = new Person();
(2) 使用对象
// 使用属性: 对象名.属性名
p.name;
// 使用行为: 对象名.方法名()
在一个类中想使用另一个类中的内容, 需要先创建对象.
/**
* 测试类
*/
public class PersonTest {
public static void main(String[] args) {
// 写代码, 模拟各种场景,
// 来测试功能类中的内容是否正确
// 创建了一个Person对象, 对象名是p
Person p = new Person();
// 对象名.属性名
p.name = "杨超越";
p.age = 20;
// 打印
System.out.println("姓名是: " + p.name + ", 年龄是: " + p.age);
p.eat();
p.sleep(8);
}
}
4. 成员变量和局部变量
[外链图片转存失败(img-bUiE5ZhW-1564289778181)(assets/1563502911445.png)]
成员变量和局部变量的区别
描述 | 位置不同 | 作用域(所在的大括号)不同 | 默认值不同 |
---|---|---|---|
局部变量 | 方法中或者方法声明上(参数列表) | 所在的方法中 | 没有默认值 |
成员变量 | 类中方法外 | 所在的类中 | 有默认值 |
局部变量在使用前, 必须赋值
数据类型 | 默认值 |
---|---|
整型(byte, short, int, long) | 0 |
浮点型(float, double) | 0.0 |
布尔(boolean) | false |
字符(char) | ‘\u0000’ |
引用数据类型 | null |
三. 创建对象的内存图
四. 封装
- 重点掌握标准格式
1. 封装的原则和格式
private: 可以修饰成员变量和成员方法, 作用: 被private修饰的内容, 只能在本类中被访问.
- 隐藏属性: 将属性使用private修饰
- 对外提供公共的访问方式: get/set方法
2. 优化1- this
-
在set方法中出现了, 成员变量和局部变量同名.
- 此时要遵循就近原则, 就出现了赋值语句变成了: 局部变量赋值给局部变量
age = age; name = name;
this: 能够解决什么问题?
- 当成员变量和局部变量同名的时候, 使用
this.变量名
获取到的是成员变量.
3. 优化2-构造方法
- 目标: 创建对象的同时, 给成员变量赋值.
构造方法
- 格式:
修饰符 构造方法名(参数列表) {}
- 没有返回值类型, 连void都没有
- 构造方法的名字和类名相同
// 空参构造/ 无参构造
public 类名() {
}
// 有参构造/ 全参构造/ 满参构造
public 类名(参数列表) { // 小括号中有参数, 参数依据类中所有成员变量来写
this.属性名 = 参数列表中局部变量的名字;
}
作用
- 用来创建对象(创建对象时, 一定调用了构造方法)
- 对类中的成员进行初始化(赋值)
注意事项:
- 如果类中没有手动给出任何的构造方法, 系统会默认提供空参构造
- 如果类中手动给出了任意一个构造方法, 系统将不会默认提供这个空参构造
五. 标准的JavaBean
- 功能类
package com.itheima._05bean;
import java.util.Properties;
/*
1. 封装,
将成员变量使用private修饰
对外提供公共的访问方式
this
2. 构造方法
*/
public class Phone {
// 属性
private String brand;
private double price;
private String color;
// 空参
public Phone() {
}
// 有参
public Phone(String brand, double price, String color) {
this.brand = brand;
this.price = price;
this.color = color;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
// 行为
public void call() {
System.out.println("打电话");
}
}
- 测试类
package com.itheima._02face_object.demo02;
/**
* 测试类
*/
public class PersonTest {
public static void main(String[] args) {
// 写代码, 模拟各种场景,
// 来测试功能类中的内容是否正确
// 创建了一个Person对象, 对象名是p
Person p = new Person();
// 对象名.属性名
p.name = "杨超越";
p.age = 20;
// 打印
System.out.println("姓名是: " + p.name + ", 年龄是: " + p.age);
p.eat();
p.sleep(8);
}
}