// Student.java
package com.example;
public class Student {
private String name;
private int age;
// 有参构造器
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// Getter 和其他方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
// StudentOperator.java
package com.example;
public class StudentOperator {
public void printTotalScore(Student s) {
// 这里可以直接使用传入的Student对象
System.out.println("Student Name: " + s.getName());
System.out.println("Student Age: " + s.getAge());
}
}
// Test.java
package com.example;
public class Test {
public static void main(String[] args) {
Student s = new Student("周", 21);
StudentOperator operator = new StudentOperator();
operator.printTotalScore(s); // 传入Student对象
}
}
具体解释:
优点:
这种方法适用于需要在对象创建时就初始化依赖对象的情况,并且能够确保对象的状态在方法调用时是有效的。
-
构造器访问:如果
Student
类的有参构造器是public
、protected
或者使用了默认的包级访问权限(没有明确的修饰符),那么在同一个包内的Test
类和StudentOperator
类都可以调用这个构造器来创建Student
对象。 -
传递对象:
StudentOperator
类中的方法printTotalScore(Student s)
可以接受Student
对象作为参数,因为Student
是在同一个包中的类。只要Student
类的构造器和任何相关的成员(属性和方法)是可访问的(即不是private
),可以在该方法中访问传入的Student
对象。 -
主函数中的s传给了StudentOperator中的printTotalScore直接进行相应方法操作。
-
也可以这样写:
// Student.java package com.example; public class Student { private String name; private int age; // 有参构造器 public Student(String name, int age) { this.name = name; this.age = age; } // Getter 和其他方法 public String getName() { return name; } public int getAge() { return age; } } // StudentOperator.java package com.example; public class StudentOperator { private Student s1; // 有参构造器 public StudentOperator(Student s1) { this.s1 = s1; } public void printTotalScore() { // 使用s1,假设s1在构造时已经被初始化 if (s1 != null) { System.out.println("Student Name: " + s1.getName()); System.out.println("Student Age: " + s1.getAge()); } else { System.out.println("No student data available."); } } } // Test.java package com.example; public class Test { public static void main(String[] args) { Student s = new Student("周", 21); StudentOperator operator = new StudentOperator(s); // 通过构造器传入Student对象 operator.printTotalScore(); // 打印学生信息 } }
解释:
-
StudentOperator
类:s1
是StudentOperator
类的一个私有变量。- 通过构造器
StudentOperator(Student s1)
,你可以在创建StudentOperator
对象时初始化s1
。 printTotalScore()
方法可以直接访问s1
,因为s1
在对象创建时已经被初始化。
-
Test
类:- 创建了一个
Student
对象s
。 - 创建了一个
StudentOperator
对象operator
,并通过构造器传入了Student
对象s
。 - 调用
operator.printTotalScore()
打印学生信息。
- 创建了一个
- 封装性:
StudentOperator
类可以在对象创建时将Student
对象封装在内部,这种方式有助于隐藏实现细节并提高类的封装性。 - 简化方法:
printTotalScore()
方法不需要接受参数,可以直接使用已经初始化的s1
,使方法调用更加简洁。