程序场景:
一、面向对象设计的基本步骤
面向对象设计的过程就是抽象的过程,分三步走:
①发现类
根据“对象”抽象出“类”
②发现类的属性
在定义类的属性时,要根据业务需求进行定义,只放和业务相关的属性(比如说狗的毛发颜色也是狗的属性,但是跟业务需求无关,所以不需要处理)
③发现类的方法
在定义类的方法时,要根据业务需求进行定义,只放和业务相关的方法(比如说狗喝水狗的方法,但是跟业务需求无关,所以不需要处理)
二、使用类图描述面向对象设计
程序设计是一个逐步调整、完善的过程,类图是面向对象设计的“图纸”,使用“图纸”进行设计,方便了沟通和修改
Penguin |
+ name:String + health:int + love:int + strain:String |
+ print():void |
三、构造方法
- 构造方法是一种特殊的方法,它是一个与类同名且无返回值类型的方法
- 构造方法的功能主要是完成对象的初始化
- 对象的创建就是通过构造方法来完成,当类实例化一个对象时,会自动调用构造方法
构造方法的特点
方法名与类名相同,没有返回值类型
构造方法的作用
初始化对象/创建对象
在没有给类提供任何构造方法时,系统会提供一个默认无参构造方法。一旦提供了自定义构造方法,系统将不再提供这个无参构造方法。如果要使用它,则必须手动添加
四、方法重载
在同一个类中,方法名相同,参数项必须不同,方法的重载跟返回值类型和修饰符无关。
方法重载的优点
方法重载其实是对一般方法的一种升级,可以根据参数的不同,采用不同的实现方法,而且不需要编写多个名称,只要记住一个方法即可。
代码演示
package com.oop.day04;
/**
* @author: zkz
* @datetime: 2023/12/11
* @desc:方法重载示例
*/
public class Calculator {
public int getResult (int num1, int num2) {
return num1 + num2;
}
public double getResult (double num1, double num2, double num3) {
return num1 + num2 + num3;
}
public double getResult (double num1, int num2) {
return num1 + num2;
}
}
这三个方法,方法名都一样,但是参数类型和长度不一样,所以是方法重载,但是如果参数类型一样,那么就不是方法重载
五、基本数据类型传参与引用数据类型传参的区别
- 基本数据类型传参传的是值,前后的数据不会发生变化
- 引用数据类型传参传的是地址,前后的数据会发生变化
- String类型虽然也是引用数据类型,但是因为是final修饰的,因此前后的数据也不会发生变化
六、static修饰符/关键字
public static final 类型 标识符 = 值;
是否可以通过某个关键字来修饰成员变量和方法,将其变为类的成员,从而实现所有对象对于该成员的共享。
static修饰和非static修饰的区别
static、非private修饰 | 非static、private修饰 | |
属性 | 类属性、类变量 | 实例属性、实例变量 |
方法 | 类方法 | 实例方法 |
调用方式 | 类名.属性 类名.方法() 对象.属性 对象.方法() | 对象.属性 对象.方法() |
归属 | 类 | 单个对象 |
static总结
有static的变量叫做静态变量,没有static的变量叫做实例变量
有static的方法叫做静态方法,没有static的方法叫做静态方法
在静态方法中,没能使用静态变量,不能使用普通变量
在普通方法中,既可以使用普通变量,也可以使用静态变量
任何方法中,都不可以创建静态变量,因为方法中的变量是局部变量,两者有冲突
七、封装
封装的好处
- 便于使用者正确使用系统,防止错误修改属性
- 有助于系统之间的松耦合,提高系统独立性
- 提高软件的可重用性
- 降低了构建大型系统的风险
封装最主要是为了安全
封装的具体步骤
- 私有化属性
- 生成公有的getter/setter方法
- 在方法中加入逻辑判断
代码演示
package com.oop.day04;
/**
* @author: zkz
* @datetime: 2023/12/12
* @desc:封装演示——类
*/
public class Dog {
//健康值
private int health;
//亲密度
private int love;
public void setHealth(int health) {
if (health > 100 || health < 0) {
this.health = 60;
System.out.println("健康值应该在0和100之间");
} this.health = health;
}
public void setLove(int love) {
if (love > 100 || love < 0) {
this.love = 0;
System.out.println("亲密度应该在0和100之间");
} this.love = love;
}
public void show() {
System.out.println("健康值:" + health);
System.out.println("亲密度:" + love);
}
}
package com.oop.day04;
/**
* @author: zkz
* @datetime: 2023/12/12
* @desc:封装演示——main方法
*/
public class DogMain {
public static void main(String[] args) {
Dog dog = new Dog();
dog.setHealth(-1000);
dog.setLove(60);
dog.show();
}
}
运行结果: