设计一个学生信息读取器,希望所设计的读取器可以展示学生的学号和名字,分别采用面向抽象编程和面向接口的编程实现。其中:除了主类外,还有学生类Student和三类学生,即本科生(Undergraduate)、硕士生(Master Degree Candidate)和博士生(Doctoral Candidate),以及的学生信息读取器StuInfoReader和大学(University)。其中:大学负责学生相关信息的设定。
时间: 2023-06-20 20:06:42 浏览: 94
面向抽象编程实现:
```java
// 学生接口
public interface Student {
String getID(); // 获取学生学号
String getName(); // 获取学生姓名
}
// 本科生类
public class Undergraduate implements Student {
private String id;
private String name;
public Undergraduate(String id, String name) {
this.id = id;
this.name = name;
}
@Override
public String getID() {
return id;
}
@Override
public String getName() {
return name;
}
}
// 硕士生类
public class MasterDegreeCandidate implements Student {
private String id;
private String name;
public MasterDegreeCandidate(String id, String name) {
this.id = id;
this.name = name;
}
@Override
public String getID() {
return id;
}
@Override
public String getName() {
return name;
}
}
// 博士生类
public class DoctoralCandidate implements Student {
private String id;
private String name;
public DoctoralCandidate(String id, String name) {
this.id = id;
this.name = name;
}
@Override
public String getID() {
return id;
}
@Override
public String getName() {
return name;
}
}
// 学生信息读取器接口
public interface StuInfoReader {
void read(Student student); // 读取学生信息
}
// 学生信息读取器实现类
public class StuInfoReaderImpl implements StuInfoReader {
@Override
public void read(Student student) {
System.out.println("Student ID: " + student.getID());
System.out.println("Student Name: " + student.getName());
}
}
// 大学类
public class University {
public static void main(String[] args) {
// 设定学生信息
Student undergraduate = new Undergraduate("001", "Tom");
Student masterDegreeCandidate = new MasterDegreeCandidate("002", "Jerry");
Student doctoralCandidate = new DoctoralCandidate("003", "John");
// 学生信息读取器
StuInfoReader stuInfoReader = new StuInfoReaderImpl();
// 读取学生信息
stuInfoReader.read(undergraduate);
stuInfoReader.read(masterDegreeCandidate);
stuInfoReader.read(doctoralCandidate);
}
}
```
面向接口编程实现:
```java
// 学生信息接口
public interface StudentInfo {
String getID(); // 获取学生学号
String getName(); // 获取学生姓名
}
// 学生类
public class Student implements StudentInfo {
private String id;
private String name;
public Student(String id, String name) {
this.id = id;
this.name = name;
}
@Override
public String getID() {
return id;
}
@Override
public String getName() {
return name;
}
}
// 本科生类
public class Undergraduate extends Student {
public Undergraduate(String id, String name) {
super(id, name);
}
}
// 硕士生类
public class MasterDegreeCandidate extends Student {
public MasterDegreeCandidate(String id, String name) {
super(id, name);
}
}
// 博士生类
public class DoctoralCandidate extends Student {
public DoctoralCandidate(String id, String name) {
super(id, name);
}
}
// 学生信息读取器接口
public interface StuInfoReader {
void read(StudentInfo studentInfo); // 读取学生信息
}
// 学生信息读取器实现类
public class StuInfoReaderImpl implements StuInfoReader {
@Override
public void read(StudentInfo studentInfo) {
System.out.println("Student ID: " + studentInfo.getID());
System.out.println("Student Name: " + studentInfo.getName());
}
}
// 大学类
public class University {
public static void main(String[] args) {
// 设定学生信息
StudentInfo undergraduate = new Undergraduate("001", "Tom");
StudentInfo masterDegreeCandidate = new MasterDegreeCandidate("002", "Jerry");
StudentInfo doctoralCandidate = new DoctoralCandidate("003", "John");
// 学生信息读取器
StuInfoReader stuInfoReader = new StuInfoReaderImpl();
// 读取学生信息
stuInfoReader.read(undergraduate);
stuInfoReader.read(masterDegreeCandidate);
stuInfoReader.read(doctoralCandidate);
}
}
```