java编程题 本人新手,求详解。

假设学生的属性包括学号(int类型)、姓名(String类型)、数学成绩(double类型)和计算机成绩(double类型),要求:

(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方法作为入口函数,用于按要求声明这些对象以及去调用对象中的方法。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-06-23

下面是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();

    }

}

下面是我自己运行后的效果:

麻烦看一下,是否能够满足您的要求。

相似回答