118 lines
3.3 KiB
Java
118 lines
3.3 KiB
Java
package day05;
|
||
|
||
/**
|
||
* 第 5 天:面向对象(上)—— 类与对象、封装
|
||
* 目标:掌握如何定义一个类,如何创建和使用对象
|
||
*
|
||
* 重点:
|
||
* private 成员变量 + public getter/setter = 封装
|
||
* 构造方法 = 初始化对象的快捷方式
|
||
* this = 区分成员变量和局部变量
|
||
*/
|
||
|
||
// ==================== Student 类定义 ====================
|
||
class Student {
|
||
|
||
// 1. 私有成员变量(封装:外部不能直接访问)
|
||
private String name;
|
||
private int age;
|
||
private String studentId; // 学号
|
||
|
||
// 2. 构造方法(与类同名,无返回值)
|
||
// 无参构造
|
||
public Student() {
|
||
this.name = "未知";
|
||
this.age = 0;
|
||
this.studentId = "未分配";
|
||
}
|
||
|
||
// 有参构造(支持创建对象时直接赋值)
|
||
public Student(String name, int age, String studentId) {
|
||
this.name = name;
|
||
this.age = age;
|
||
this.studentId = studentId;
|
||
}
|
||
|
||
// 3. Getter / Setter(公开的访问入口)
|
||
public String getName() {
|
||
return name;
|
||
}
|
||
|
||
public void setName(String name) {
|
||
// 可以在 setter 里加校验逻辑
|
||
if (name == null || name.trim().isEmpty()) {
|
||
System.out.println("⚠ 姓名不能为空!");
|
||
return;
|
||
}
|
||
this.name = name;
|
||
}
|
||
|
||
public int getAge() {
|
||
return age;
|
||
}
|
||
|
||
public void setAge(int age) {
|
||
if (age < 0 || age > 150) {
|
||
System.out.println("⚠ 年龄不合理!");
|
||
return;
|
||
}
|
||
this.age = age;
|
||
}
|
||
|
||
public String getStudentId() {
|
||
return studentId;
|
||
}
|
||
|
||
public void setStudentId(String studentId) {
|
||
this.studentId = studentId;
|
||
}
|
||
|
||
// 4. 行为方法
|
||
public void study(String subject) {
|
||
System.out.println(name + " 正在学习 " + subject + "。");
|
||
}
|
||
|
||
public void takeExam(String subject) {
|
||
System.out.println(name + "(学号:" + studentId + ")正在参加 " + subject + " 考试。");
|
||
}
|
||
|
||
public void introduce() {
|
||
System.out.println("-----------------------------------");
|
||
System.out.println("自我介绍:");
|
||
System.out.println(" 姓名:" + name);
|
||
System.out.println(" 年龄:" + age + " 岁");
|
||
System.out.println(" 学号:" + studentId);
|
||
System.out.println("-----------------------------------");
|
||
}
|
||
}
|
||
|
||
// ==================== 测试类 ====================
|
||
class StudentTest {
|
||
public static void main(String[] args) {
|
||
System.out.println("========== 面向对象练习 ==========\n");
|
||
|
||
// 1. 使用无参构造 + setter 创建对象
|
||
Student s1 = new Student();
|
||
s1.setName("张三");
|
||
s1.setAge(20);
|
||
s1.setStudentId("2024001");
|
||
s1.introduce();
|
||
s1.study("Java");
|
||
s1.takeExam("面向对象程序设计");
|
||
|
||
// 2. 使用有参构造直接创建
|
||
Student s2 = new Student("李四", 22, "2024002");
|
||
s2.introduce();
|
||
|
||
// 3. 创建第三个学生
|
||
Student s3 = new Student("王五", 19, "2024003");
|
||
s3.introduce();
|
||
s3.study("数据结构");
|
||
|
||
// 4. 演示数据校验
|
||
System.out.println("\n--- 测试 data 校验 ---");
|
||
s3.setAge(-5); // 触发校验
|
||
s3.setName(""); // 触发校验
|
||
}
|
||
}
|