java - 隐式 super 构造函数 StudentTest() 未定义。必须显式调用另一个构造函数”

标签 java constructor subclass

我在使用 Eclipse 时遇到了这个错误。

import static org.junit.Assert.*;

public class StudentTest extends Student {

    @Before
    public void setUp() throws Exception {
    }

    @Test
    public void testGetCurrentEarnedCr() {
        Student student1 = new Student("Jane", "Smith");
        int credits = 45;
        student1.setCurrentEarnedCr(credits);
        assertEquals(credits, student1.getCurrentEarnedCr());
    }

}

我不明白为什么会给我这个错误。它与 Eclipse 有关吗?我在网上查找并尝试了建议的解决方案来修复它是否实际上是 Eclipse 错误但它没有解决任何问题。

此外,如果这有助于解决任何问题,这里是 Student 类。

public class Student
{
    // Information about the individual student
    private double gpa;
    private String firstName, lastName, id;
    private int currentEarnedCr; // Current earned credits (already completed)
    private int anticipatedAdditionalCr; // Anticipated additional credits (currently taking)
    private boolean lascComplete; // Has the student completed LASC requirements
    private boolean majorComplete; //Has the student completed requirements for the major

    // Minimum number of credits required to graduate
    public static final int REQUIRED_CR = 120;

    // Keeps track of the id number to assign to the next student to be created
    private static int nextId = 1;

    /**
     * Creates a new student given a first and last name. An id number is assigned sequentially.
     *
     * @param firstName the student's first name
     * @param lastName the student's last name
     */
    public Student(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.id = String.format("%07d",nextId); // 7 digits wide, zero padded
        nextId++;
    }

    /**
     * Returns the number of students which have been created.
     *
     * @return the number of students which have been created
     */
    public static int getStudentCount() {
        return nextId-1;
    }

    /**
     * Set the GPA of the student.
     *
     * @param gpa the student's GPA
     */
    public void setGpa(double gpa) {
        this.gpa = gpa;
    }

    /**
     * Returns the student's GPA.
     *
     * @return the student's GPA
     */
    public double getGpa() {
        return gpa;
    }

    /**
     * Sets the student's first name.
     *
     * @param firstName the student's first name
     */
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    /**
     * Returns the student's first name.
     *
     * @returns the student's first name
     */
    public String getFirstName() {
        return firstName;
    }

    /**
     * Sets the student's last name.
     *
     * @param lastName the student's last name
     */
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    /**
     * Returns the student's last name.
     *
     * @returns the student's last name
     */
    public String getLastName() {
        return lastName;
    }

    /**
     * Returns the student's ID number.
     *
     * @returns the student's ID number
     */
    public String getId() {
        return id;
    }

    /**
     * Sets the student's current earned credits.
     * (This should really be done by looking at a
     * list of completed courses, not by setting it directly.)
     *
     * @param currentEarnedCr the number of current earned credits
     */
    public void setCurrentEarnedCr(int currentEarnedCr) {
        this.currentEarnedCr = currentEarnedCr;
    }

    /**
     * Returns the student's current earned credits.
     *
     * @return the student's current earned credits
     */
    public int getCurrentEarnedCr() {
        // This should really be done by looking at a
        // list of completed courses, not by returning a variable.
        return currentEarnedCr;
    }

    /**
     * Sets the student's anticipated additional credits (the
     * courses they are currently taking).
     * (This should really be done by looking at a
     * list of registered courses, not by setting it directly.)
     *
     * @param anticipatedAdditionalCr the number of anticipated additional credits
     */
    public void setAnticipatedAdditionalCr(int anticipatedAdditionalCr) {
        this.anticipatedAdditionalCr = anticipatedAdditionalCr;
    }

    /**
     * Returns the student's anticipated additional credits.
     *
     * @return the student's anticipated additional credits
     */
    public int getAnticipatedAdditionalCr() {
        // This should really be done by looking at a
        // list of registered courses, not by returning a variable.
        return anticipatedAdditionalCr;
    }

    /**
     * Sets whether the student has completed the LASC requirements.
     * (This should really be done by looking at a
     * list of completed courses, not by setting it directly.)
     *
     * @param lascComplete whether LASC requirements are complete
     */
    public void setLascComplete(boolean lascComplete) {
        this.lascComplete = lascComplete;
    }

    /**
     * Returns whether the student has completed the LASC requirements.
     *
     * @return whether the student has completed the LASC requirements
     */
    public boolean getLascComplete() {
        // This should really be done by looking at a
        // list of complete courses, not by returning a variable.
        return lascComplete;
    }

    /**
     * Sets whether the student has completed the major requirements.
     * (This should really be done by looking at a
     * list of completed courses, not by setting it directly.)
     *
     * @param majorComplete whether major requirements are complete
     */
    public void setMajorComplete(boolean majorComplete) {
        this.majorComplete = majorComplete;
    }

    /**
     * Returns whether the student has completed the major requirements.
     *
     * @return whether the student has completed the major requirements
     */
    public boolean getMajorComplete() {
        // This should really be done by looking at a
        // list of complete courses, not by returning a variable.
        return majorComplete;
    }

    /**
     * Returns the student's remaining credits to graduate
     * (not including the courses they are currently taking).
     *
     * @return the student's remaining credits to graduate
     */
    public int getCurrentRemainingCr() {
        return REQUIRED_CR - currentEarnedCr;
    }

    /**
     * Returns the student's anticipated remaining credits to graduate
     * (including the courses they are currently taking).
     *
     * @return the student's anticipated remaining credits to graduate
     */
    public int getAnticipatedRemainingCr() {
        return getCurrentRemainingCr() - anticipatedAdditionalCr;
    }

    /**
     * Returns whether the student is ready to graduate.
     *
     * @return whether the student is ready to graduate
     */
    public boolean readyToGraduate() {
        return getCurrentRemainingCr() == 0 && gpa >= 2.0 && lascComplete && majorComplete;
    }
}

最佳答案

这不是 eclipse 的问题,而是您在 Studenttest 中继承 Student 类的问题。通常,如果父类(super class)没有默认构造函数,那么子类应该有一个显式调用父类构造函数的构造函数。在你的情况下,你的父 Student 类只有一个带参数的构造函数,所以任何扩展 Student 的类都应该有一个构造函数,它使用 super(firstName.lastName) 显式调用 Student 的这个构造函数,否则 java 不允许你扩展你的类。

作为您问题的解决方案,您无需在 StudentTest 类中扩展 Student 类。通常任何测试任何其他类的功能的测试类都不需要扩展它。

关于java - 隐式 super 构造函数 StudentTest() 未定义。必须显式调用另一个构造函数”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25800035/

相关文章:

java - JAXB 编码子类继承

c++如何为另一个类中的定义类分配特定值

java - 构造函数和对象未打印

swift - 如何在 Swift 中添加 SKSpriteNode 到场景中?

android - 如何使用 Intent 从第三个 Activity 返回到第二个 Activity

java - 如何在 Netbeans IDE 6.7.1 中编写 javascript 文件

java - 如何使用JAVA实现XQL Join?

macos - 自定义 NSButtonCell,drawBezelWithFrame 未调用

java - 如何使用打印对话框打开使用 Flying-saucer/itext 创建的 PDF

javascript - 在 JavaScript 中,构造函数和作为构造函数调用的函数返回对象之间有什么区别?