继承与多态赋值

Inheritance & Polymorphism Assignment

我需要写一个应用程序来显示每个学生的姓名和身份证号码,并计算他们是否通过。我需要 4 个不同的 类 student、studenttest、undergraduate、postgraduate。

到目前为止,这是我所拥有的:

学生

class Student {

//private data members
private long idNumber = 0;
private String name = "Not Given";
private int markForMaths = 0;
private int markForEnglish = 0;
private int markForEconomics = 0;
private int markForPhilosophy = 0;
private int markForIT = 0;


//Default constructor
public Student() {
name = "Not Given";
idNumber = 0;
markForMaths = 0;
markForEnglish = 0;
markForEconomics = 0;
markForPhilosophy = 0;
markForIT = 0;  
}

//Constructs a new Student with passed name and age parameters.
public Student(String studentName, long studentIdNumber) {
name = studentName;
idNumber = studentIdNumber;
}

    //Returns the name of student.
    public String getName( ) {
        return name;
    }

    //Returns the idNumber of student.
    public long getIdNumber( ) {
        return idNumber;
    }       

    //entermarks()
    //enter all subject marks given as args
    public void enterMarks(int maths, int english, int economics, int philosophy, int informationTechnology)
    {
    markForMaths = maths;
    markForEnglish = english;
    markForEconomics = economics;
    markForPhilosophy = philosophy;
    markForIT = informationTechnology;
    }

    //getMathsMark()
    //return mark for maths
    public int getMathsMark()
    {
    return markForMaths;
    }

    //getEnglishMark()
    //return mark for English
    public int getEnglishMark()
    {
    return markForEnglish;
    }

    //getEconomicsMark()
    //return mark for Economics
    public int getEconomicsMark()
    {
    return markForEconomics;
    }

    //getPhilosophyMark()
    //return mark for Philosophy
    public int getPhilosophyMark()
    {
    return markForPhilosophy;
    }

    //getITMark()
    //return mark for IT
    public int getITMark()
    {
    return markForIT;
    }

    //calculateAverageMark()
    //return the average of the three marks
    public double calculateAverageMark()
    {
    return ((markForMaths + markForEnglish +
    markForEconomics + markForPhilosophy + markForIT) / 3.0);
    }

    //Sets the name of student.
    public void setName(String studentName ) {
        name = studentName;
    }

    //Sets the idNumber of student.
    public void setIdNumber(long studentIdNumber ) {
        idNumber = studentIdNumber;
    }

}//end class

本科

public class Undergarduate extends Student{



}

研究生

public class Postgraduate extends Student{



}

学生考试

import java.util.Scanner;

public class StudentTest {

static int array;

//create method createArray
public static Student[] createArray() {

    Scanner int_input = new Scanner(System.in);

    //user enters size of array         
    System.out.print("Enter Size of Array: ");
    array = int_input.nextInt();

    Student[] array = new Student[0]; 

    //read user input as arraySize
    return new Student[5];

}//end method   

//create method populateArray
public static void populateArray(Student[] array) {

    Scanner string_input = new Scanner(System.in);
    Scanner long_input = new Scanner(System.in);
    Scanner int_input = new Scanner(System.in);

    for (int i = 0; i < 3; i++) {
        Student student = new Student(); // new student

        //set name
        System.out.println("Enter Student Name: ");
        student.setName(string_input.nextLine());

        //set ID number
        System.out.println("Enter Student ID Number: ");
        student.setIdNumber(long_input.nextLong());

        //set Marks
        System.out.println("Enter Marks");
        student.enterMarks(int_input.nextInt());

        //put new student into array passed to the method
        array[i] = student; 

    }//end for loop                         
}//end method

//create method display Array
public static void displayArray(Student[] array){
    System.out.println("Array Contents");

    for (Student s : array) {

        System.out.println(String.format("%s %d", s.getName(), 
                s.getIdNumber(), s.getEnglishMark(), s.getMathsMark(), 
                s.getEconomicsMark(), s.getPhilosophyMark(), s.getITMark(),
                s.calculateAverageMark()));

    }//end for loop
}//end method

public static void main(String [] args) {
    // create array of size specified by user
    Student[] students = createArray();

    //populate this array with data from user
    populateArray(students);

    //display array contents
    displayArray(students);    

}//end main method
}//end class

我在线上的studenttest一直报错

student.enterMarks(int_input.nextInt());

错误显示:

Student 类型中的方法 enterMarks(int, int, int, int, int, int) 不适用于参数 (int)

您正在尝试调用方法 enterMarks(int),但学生 class 中只定义了 enterMarks(int, int, int, int, int, int) 方法。

由于您的 class 学生期望每个科目(英语、数学等)的分数,请更改您的 StudentTest class 以便它通过每个科目作为 enterMarks 方法的输入。

更改您的方法调用:

student.enterMarks(int_input.nextInt());

student.enterMarks(int_input.nextInt(), int_input.nextInt(), int_input.nextInt(), int_input.nextInt(), int_input.nextInt(), int_input.nextInt());//to make it more readable and usable, first take input from keyboard by asking user to enter the number, assign to individual marks variable and then pass it to the method.