使用无参构造器获取其他类中的有参对象
时间: 2023-01-28 16:45:10 浏览: 101
在 Java 中,使用无参构造器获取其他类中的有参对象的方法是这样的:
1. 在要获取的类中定义一个有参构造器。
```
public class OtherClass {
private int param;
public OtherClass(int param) {
this.param = param;
}
}
```
2. 在要使用这个有参对象的类中,定义一个无参构造器,在这个无参构造器中创建有参对象。
```
public class MyClass {
private OtherClass other;
public MyClass() {
// 在无参构造器中创建有参对象
other = new OtherClass(123);
}
}
```
之后就可以在 MyClass 的其他方法中使用 other 对象了。
```
MyClass my = new MyClass();
int param = my.other.param;
```
注意,如果 OtherClass 类没有定义有参构造器,那么 MyClass 中就无法通过无参构造器创建 OtherClass 的有参对象。
相关问题
定义一个Student类,继承Person类,有String类型的属性ID和int类型的属性classes。 定义无参构造器,每次无参构造器被调用会在控制台打印"创建一名学生。 定义有参构造器,构造器有String类型的形参name,String类型的形参gender,int类型的形参age,String类型的形参ID和int类型的形参classes,调用此构造器首先会使用name、gender和age三个形参通过super关键字调用父类构造器赋值,再利用形参和this关键字为此对象的ID届属性和 classes届性赋值。 定义Test类,在其中定义main方法。在main方法中首先使用无参构造器获得Teacher类对象t和Student类对象s,再使用一名你熟悉的学校老师的信息和你自己以及一位你的室友的信息,得到另外的Teacher对象 (t1)和2位Student对象 (s1和s2)。打印输出对象信息,每行一人。
这是如何定义Student类和有参构造器的代码:
```
class Student extends Person {
String ID;
int classes;
// 无参构造器
Student() {
System.out.println("创建一名学生。");
}
// 有参构造器
Student(String name, String gender, int age, String ID, int classes) {
super(name, gender, age); // 调用父类构造器
this.ID = ID;
this.classes = classes;
}
}
```
这是如何在Test类的main方法中使用构造器创建Teacher和Student对象的代码:
```
public class Test {
public static void main(String[] args) {
// 使用无参构造器创建Teacher和Student对象
Teacher t = new Teacher();
Student s = new Student();
// 使用有参构造器创建Teacher和Student对象
Teacher t1 = new Teacher("张老师", "男", 35, "数学");
Student s1 = new Student("李小龙", "男", 20, "123456", 3);
Student s2 = new Student("王小丽", "女", 19, "987654", 2);
// 打印输出对象信息
System.out.println(t.name + " " + t.gender + " " + t.age + " " + t.subject);
System.out.println(s.name + " " + s.gender + " " + s.age + " " + s.ID + " " + s.classes);
System.out.println(t1.name + " " + t1.gender + " " + t1.age + " " + t1.subject);
System.out.println(s1.name + " " + s1.gender + " " + s1.age + " " + s1.ID + " " + s1.classes);
System.out.println(s2.name + " " + s2.gender + " " + s2.age + " " + s2.ID + " " + s2.classes);
}
}
```
请注意,这是假设Person类已经存在,并且具有String类型的属性name、gender和int类型的属性age,以及有参构造器。
利用反射机制 *使用无参构造器实例化 student * 使用有参构造器实例化student *
好的,以下是Java代码示例:
```java
// Student 类
public class Student {
private String name;
private int age;
// 无参构造器
public Student() {
this.name = "Unknown";
this.age = 0;
}
// 有参构造器
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// getter 和 setter 省略
}
// 使用无参构造器实例化 student
Student student1 = null;
try {
Class<?> clazz = Class.forName("com.example.Student");
student1 = (Student) clazz.newInstance();
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
// 使用有参构造器实例化 student
Student student2 = null;
try {
Class<?> clazz = Class.forName("com.example.Student");
Constructor<?> constructor = clazz.getDeclaredConstructor(String.class, int.class);
constructor.setAccessible(true); // 如果构造器是私有的,需要设置可访问
student2 = (Student) constructor.newInstance("Tom", 18);
} catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
```
其中,第一个例子使用了 `Class.newInstance()` 方法来实例化对象,这个方法会调用无参构造器来创建对象。第二个例子使用了 `Class.getDeclaredConstructor()` 方法来获取有参构造器的引用,并通过 `Constructor.newInstance()` 方法来实例化对象。需要注意的是,如果有参构造器是私有的,则需要设置可访问。
阅读全文