java编程题 本人新手,求详解。
(1)声明学生类Student,其中包括上述要求的成员变量和构造方法,还要有一个void print()方法,功能是输出成员变量(4个成员变量)的信息。
(2)声明学生类Student的子类,也就是研究生类PostGraduate,其中,研究生类继承了父类的学号、姓名、数学成绩和计算机成绩,此外,研究生类还有自己的两个新属性导师姓名(String类型)和研究方向(String类型)。还有,研究生类要重写父类的void print()方法,功能是输出成员变量(6个成员变量)的信息。(想一想研究生的构造方法怎么写,提示,从父类继承的成员变量可以在子类的构造方法中使用super关键字。)
(3)声明主类,在主方法main中,创建一个Student类的对象,从键盘上输入其属性信息,并且通过其print方法输出这些信息;创建一个PostGraduate类的对象,从键盘上输入其属性信息,并且通过其print方法输出这些信息。 展开
先看下最终的结果吧,是不是你想要的?
项目结构如下图所示:
其中,Student是父类,PostGraduate是子类,继承自父类Student,Main是主类,用于创建对象以及把这些对象的功能调用起来。
---------------------------Student代码如下:------------------------------
/**
* 学生类
* @author 逍遥
*
*/
public class Student {
//学号
private int sId;
//姓名
private String sName;
//数学成绩
private double mathScore;
//计算机成绩
private double computerScore;
/**
* 获取学号
* @return
*/
public int getsId() {
return sId;
}
/**
* 设置学号
* @param sId
*/
public void setsId(int sId) {
this.sId = sId;
}
/**
* 获取姓名
* @return
*/
public String getsName() {
return sName;
}
/**
* 设置姓名
* @param sName
*/
public void setsName(String sName) {
this.sName = sName;
}
/**
* 获取数学成绩
* @return
*/
public double getMathScore() {
return mathScore;
}
/**
* 设置数学成绩
* @param mathScore
*/
public void setMathScore(double mathScore) {
this.mathScore = mathScore;
}
/**
* 获取计算机成绩
* @return
*/
public double getComputerScore() {
return computerScore;
}
/**
* 设置计算机成绩
* @param computerScore
*/
public void setComputerScore(double computerScore) {
this.computerScore = computerScore;
}
/**
* 输出成员变量(4个成员变量)的信息。
*/
public void print(){
System.out.println("学号:"+sId);
System.out.println("姓名:"+sName);
System.out.println("计算机成绩:"+mathScore);
System.out.println("数学成绩:"+computerScore);
}
}
---------------------------Student代码结束------------------------------
---------------------------PostGraduate代码如下:------------------------------
/**
* 研究生类
* @author 逍遥
*
*/
public class PostGraduate extends Student{
//导师姓名
private String tName;
//研究方向
private String ResearchDirection;
/**
* 获取导师姓名
* @return
*/
public String gettName() {
return tName;
}
/**
* 设置导师姓名
* @param tName
*/
public void settName(String tName) {
this.tName = tName;
}
/**
* 获取研究方向
* @return
*/
public String getResearchDirection() {
return ResearchDirection;
}
/**
* 设置研究方向
* @param researchDirection
*/
public void setResearchDirection(String researchDirection) {
ResearchDirection = researchDirection;
}
/**
* 研究生类重写父类的void print()方法,功能是输出成员变量(6个成员变量)的信息
*/
@Override
public void print() {
// TODO Auto-generated method stub
super.print();
System.out.println("导师姓名:"+tName);
System.out.println("研究方向:"+ResearchDirection);
}
}
---------------------------PostGraduate代码结束------------------------------
---------------------------Main代码如下:------------------------------
import java.util.Scanner;
/**
* 主类
* @author 逍遥
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//用于获取从键盘上输入的信息
Scanner input=new Scanner(System.in);
//创建一个Student类的对象
Student student=new Student();
//从键盘上输入其属性信息
System.out.print("请输入学生的学号:");
student.setsId(input.nextInt());
System.out.print("请输入学生的姓名:");
student.setsName(input.next());
System.out.print("请输入学生的数学成绩:");
student.setMathScore(input.nextDouble());
System.out.print("请输入学生的计算机成绩:");
student.setComputerScore(input.nextDouble());
//并且通过其print方法输出这些信息;
student.print();
//创建一个PostGraduate类的对象
PostGraduate postGraduate=new PostGraduate();
//从键盘上输入其属性信息
System.out.print("请输入研究生的学号:");
postGraduate.setsId(input.nextInt());
System.out.print("请输入研究生的姓名:");
postGraduate.setsName(input.next());
System.out.print("请输入研究生的数学成绩:");
postGraduate.setMathScore(input.nextDouble());
System.out.print("请输入研究生的计算机成绩:");
postGraduate.setComputerScore(input.nextDouble());
System.out.print("请输入研究生的导师姓名:");
postGraduate.settName(input.next());
System.out.print("请输入研究生的研究方向:");
postGraduate.setResearchDirection(input.next());
//并且通过其print方法输出这些信息。
postGraduate.print();
}
}
---------------------------Main代码结束------------------------------
=================知识点的简单总结=================
本题考察的知识点是面向对象的三大特性之一:继承。
Student为父类,包含了学号、姓名、数学成绩和计算机成绩4个属性,以及一个print()方法。
PostGraduate 继承父类的时候,继承了父类中的所有方法,因为方法我都是用的public,而属性继承不了,因为我在父类中用了封装,所有属性都用private修饰了,想访问属性的话,必须通过get、set方法,这里,我重写了父类中的print方法,通过super.print();调用了父类中的print()方法。
最后就是Main类,提供了main方法作为入口函数,用于按要求声明这些对象以及去调用对象中的方法。
下面是Student类的代码:
public class Student {
private int number;
private String name;
private double mathematics_score;
private double computer_score;
public Student(int number, String name, double mathematics_score, double computer_score) {
this.number = number;
this.name = name;
this.mathematics_score = mathematics_score;
this.computer_score = computer_score;
}
public void print() {
System.out.println("学生的学号:" + this.number);
System.out.println("学生的姓名:" + this.name);
System.out.println("学生的数学成绩:" + this.mathematics_score);
System.out.println("学生的计算机成绩:" + this.computer_score);
}
}
下面是PostGraduate类的代码:
public class PostGraduate extends Student {
private String teacher_name;
private String research_field;
public PostGraduate(int number, String name, double mathematics_score, double computer_score, String teacher_name, String research_field) {
super(number, name, mathematics_score, computer_score);
this.teacher_name = teacher_name;
this.research_field = research_field;
}
public void print() {
super.print();
System.out.println("学生的导师姓名:" + this.teacher_name);
System.out.println("学生的研究方向:" + this.research_field);
}
}
下面是主类的代码:
import java.util.Scanner;
public class Main {
@SuppressWarnings("resource")
public static void main(String[] args) {
System.out.println("请输入学生的信息:");
System.out.print("请输入学生的学号:");
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
System.out.print("请输入学生的姓名:");
scanner = new Scanner(System.in);
String name = scanner.nextLine();
System.out.print("请输入学生的数学成绩:");
scanner = new Scanner(System.in);
double mathematics_score = scanner.nextDouble();
System.out.print("请输入学生的计算机成绩:");
scanner = new Scanner(System.in);
double computer_score = scanner.nextDouble();
Student student = new Student(number, name, mathematics_score, computer_score);
student.print();
System.out.println("请输入研究生的信息:");
System.out.print("请输入学生的学号:");
scanner = new Scanner(System.in);
int number2 = scanner.nextInt();
System.out.print("请输入学生的姓名:");
scanner = new Scanner(System.in);
String name2 = scanner.nextLine();
System.out.print("请输入学生的数学成绩:");
scanner = new Scanner(System.in);
double mathematics_score2 = scanner.nextDouble();
System.out.print("请输入学生的计算机成绩:");
scanner = new Scanner(System.in);
double computer_score2 = scanner.nextDouble();
System.out.print("请输入学生的导师姓名:");
scanner = new Scanner(System.in);
String teacher_name = scanner.nextLine();
System.out.print("请输入学生的研究方向:");
scanner = new Scanner(System.in);
String research_field = scanner.nextLine();
PostGraduate postGraduate = new PostGraduate(number2, name2, mathematics_score2, computer_score2, teacher_name, research_field);
postGraduate.print();
scanner.close();
}
}
下面是我自己运行后的效果:
麻烦看一下,是否能够满足您的要求。