分析以下代码package practice4_1; class Person { String name; char sex; int age; void setName(String name) { this.name = name; } void setSex(char sex) { this.sex = sex; } void setAge(int age) { this.age = age; } } class Student extends Person { String sdept; void setSdept(String sdept) { this.sdept = sdept; } void display() { System.out.println("姓名:" + name); System.out.println("性别:" + sex); System.out.println("年龄:" + age); System.out.println("所在系:" + sdept); } } public class MainClass { public static void main(String[] args) { Student stu = new Student(); stu.setName("张三"); stu.setSex('男'); stu.setAge(20); stu.setSdept("计算机科学与技术"); stu.display(); } }
时间: 2024-04-01 10:31:32 浏览: 143
这段代码定义了两个类:Person类和Student类,其中Student类继承了Person类。Person类有三个成员变量name、sex和age,以及三个方法setName、setSex和setAge,分别用于设置这三个成员变量的值。Student类有一个额外的成员变量sdept,以及一个方法setSdept,用于设置sdept的值。此外,Student类还有一个方法display,用于输出学生的信息,包括姓名、性别、年龄和所在系。
在主函数main中,首先创建了一个Student对象stu,然后通过调用它的四个setter方法,设置了它的姓名、性别、年龄和所在系。最后,调用了stu的display方法,输出了stu的信息。
总的来说,这段代码体现了面向对象编程中继承和多态的思想,使得Student类可以继承Person类的属性和方法,并且可以自定义一些新的属性和方法,从而实现更加复杂的功能。同时,通过封装、继承和多态的特性,代码也变得更加简洁和易于维护。
相关问题
package shiyan4_3; public class Student _____[代码1]_______ { String name; int score; Student(String name,int score) { this.name=name; this.score=score; } /** *补充代码[2],重写compareTo()方法 **/ public int getScore() { return score; } public String getName() { return name; } }
在上面的代码中,需要补充两个部分:
1. 在类名后面加上 `implements Comparable<Student>`,表示该类实现了 `Comparable` 接口,可以进行比较。修改后的类定义如下:
```
package shiyan4_3;
public class Student implements Comparable<Student> {
String name;
int score;
Student(String name, int score) {
this.name = name;
this.score = score;
}
/**
* 实现 Comparable 接口,重写 compareTo 方法
*/
@Override
public int compareTo(Student s) {
return this.score - s.score;
}
public int getScore() {
return score;
}
public String getName() {
return name;
}
}
```
2. 实现 `Comparable` 接口中的 `compareTo` 方法,用于比较两个 `Student` 对象的大小。在本例中,按照学生成绩从小到大进行比较,因此可以使用 `this.score - s.score` 来实现。修改后的代码如下:
```
/**
* 实现 Comparable 接口,重写 compareTo 方法
*/
@Override
public int compareTo(Student s) {
return this.score - s.score;
}
```
reflectObject(String package_class_name,String input) 该方法用于生成package_class_name所对应的类的实例对象,并初始化对象中的属性值。 举例: 入参:com.gec.Person, name=admin,sex=男,age=38,则生成一个Person对象,并给该对象赋值admin,男,38 要求: --现有Teacher类【String name、String sex、int age、int level】 --现有Person类【String name、String sex、int age、double money】 --通过Scanner分别输入类的全名和input字符串,然后调用reflectObject方法,生成对象并打印
好的,以下是代码实现:
```
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入类的全名:");
String className = scanner.nextLine();
System.out.println("请输入属性值:");
String input = scanner.nextLine();
try {
Object object = reflectObject(className, input);
System.out.println(object);
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) {
e.printStackTrace();
}
}
public static Object reflectObject(String packageClassName, String input) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
Class<?> clazz = Class.forName(packageClassName);
Object obj = clazz.getConstructor().newInstance();
String[] params = input.split(",");
for (String param : params) {
String[] keyValue = param.split("=");
String fieldName = keyValue[0].trim();
String fieldValue = keyValue[1].trim();
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
String fieldType = field.getType().getName();
if (fieldType.equals("java.lang.String")) {
field.set(obj, fieldValue);
} else if (fieldType.equals("int")) {
field.setInt(obj, Integer.parseInt(fieldValue));
} else if (fieldType.equals("double")) {
field.setDouble(obj, Double.parseDouble(fieldValue));
}
}
return obj;
}
}
class Teacher {
private String name;
private String sex;
private int age;
private int level;
public Teacher() {
}
public Teacher(String name, String sex, int age, int level) {
this.name = name;
this.sex = sex;
this.age = age;
this.level = level;
}
@Override
public String toString() {
return "Teacher{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", level=" + level +
'}';
}
}
class Person {
private String name;
private String sex;
private int age;
private double money;
public Person() {
}
public Person(String name, String sex, int age, double money) {
this.name = name;
this.sex = sex;
this.age = age;
this.money = money;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", money=" + money +
'}';
}
}
```
运行代码,输入类的全名 com.gec.Teacher,输入属性值 name=Tom,sex=男,age=30,level=5,输出结果为:
```
Teacher{name='Tom', sex='男', age=30, level=5}
```
再次运行代码,输入类的全名 com.gec.Person,输入属性值 name=Lucy,sex=女,age=25,money=5000.0,输出结果为:
```
Person{name='Lucy', sex='女', age=25, money=5000.0}
```
阅读全文