这个问题怎么解决,思考了好几天了,都没想出一个好的解决方案 。用的软件是elipse。
定义Student学生类,拥有学号、姓名、性别属性,提供构造函数,以及相应属性的get set函数,提供函数attendClass(String className)表示上课。
定义CollegeStudent大学生类继承自Student类,拥有新增属性专业,提供构造函数,提供新增属性的get和set函数
定义GraduateStudent研究生类继承自CollegeStudent类,拥有新增属性导师,提供构造函数,提供新增属性的get和set函数,提供函数doResearch() 表示做研究(打印xx is doing research)。
class Student{
private int no;
private String sex;
private String name;
public Student(int no,String name,String sex) {
this.no=no;
this.name=name;
this.sex=sex;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void print()
{
System.out.println("no: "+no);
System.out.println("name: "+name);
System.out.println("sex: "+sex);
}
}
class CollegeStudent extends Student {
private String major;
public CollegeStudent(int no, String name,String sex,String major) {
super(no,name,sex);
this.major = major;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public void print() {
super.print();
System.out.println("major: "+major);
}
}
class GraduateStudent extends CollegeStudent{
private String teacher;
public GraduateStudent(int no,String name,String sex,String major,String teacher){
super(no,name,sex,major);
this.teacher = teacher;
}
public String getTeacher() {
return teacher;
}
public void setTeacher(String teacher) {
this.teacher = teacher;
}
public void print() {
super.print();
System.out.println("supervisor: "+teacher);
}
public void doResearch() {
System.out.println(this.getName()+" is doing research");
}
}
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int no = scan.nextInt();
String name = scan.next();
String sex = scan.next();
Student s = new Student(no, name, sex);
s.print();
no = scan.nextInt();
name = scan.next();
sex = scan.next();
String major = scan.next();
CollegeStudent c = new CollegeStudent(no, name, sex, major);
c.print();
no = scan.nextInt();
name = scan.next();
sex = scan.next();
major = scan.next();
String supervisor = scan.next();
GraduateStudent g = new GraduateStudent(no, name, sex, major, supervisor );
g.print();
g.doResearch();
scan.close();
}
}
赞思考! 请你分享你目前的思路吧!
这个看你怎么思考的。你可以把学生的父类看成人,人的属性就有姓名、年龄、身高、性别.....然后学生有自己的属性 学号、年级、学历...
这个问题其实考察更多的是如何理解继承和抽象关系。
学生是一个庞大的、抽象的组织,但学生之所以被称为学生,是因为他们具有公共部分,所有满足该公共部分的群体我们都称之为学生。
“所有处于学习的人都应当被称为学生”,如果根据这个条件出发,那么我们可以定义一个抽象类abstract Student,内部应当包含一个学习的抽象方法abstract study(),(如果有更上层的基类例如Person,Student应当继承,并且将人类有的属性例如姓名,年龄,性别等全部挂载到Person类身上,而非Student类身上,Student类应当有属于自己独有的属性例如班级、学号等)。
类似地,学生既然是抽象的,那总有实现者,实现者可以是小学生,初中生,高中生,大学生等,当然如果考虑得当的话,这些小学生,初中生等也可以被认为是抽象类。
具体应当谁是真正的实现者,需要看业务需要,但实现者永远是最精确的、细分到极致的类。当然这不是强制要求,但这种解耦思想有利于后期代码的可维护性和可扩展性。