扩展摘要 类

Extending abstract classes

MyMath 的构造函数应该调用 Homework 的构造函数,但是 super(); returns 一个错误 'cannot find symbol'。它不应该有任何参数。 另外,我对如何使用 arraylist 调用方法 createAssignment 感到困惑,但我必须使用它。有什么建议吗?

作业

public abstract class Homework {
    private int pagesToRead;
    private String typeHomework;

    public Homework(int pages, String hw) {
        // initialise instance variables
        pagesToRead = 0;
        typeHomework = "none";
    }

    public abstract void createAssignment(int p);

    public int getPages() {
        return pagesToRead;
    }

    public void setPagesToRead(int p) {
        pagesToRead = p;
    }

    public String getTypeHomework() {
        return typeHomework;
    }

    public void setTypeHomework(String hw) {
        typeHomework = hw;
    }


}

我的数学

public class MyMath extends Homework {

    private int pagesRead;
    private String typeHomework;

    public MyMath() {
        super();
    }

    public void createAssignment(int p) {
        setTypeHomework("Math");
        setPagesToRead(p);
    }

    public String toString() {
        return typeHomework + " - " + pagesRead;
    }
}

public class testHomework {
    public static void main(String[] args) {
        ArrayList<Homework> list = new ArrayList<Homework>();
        list.add(new MyMath(1));
        list.add(new MyJava(1));

        for (Homework s : list) {
            s.createAssignment();
        }
    }

}

编译器错误:

关于编译器错误,您必须将 MyMath 构造器更改为类似以下内容:

 public MyMath() {
        super(someInt, someString);
    }

或者,您可以在作业中添加一个无参数的构造函数class:

 public Homework() {
        this(someInt,someString);
    }

您可以在 Javadocs tutoriel 中了解 super() 关键字:

If a constructor does not explicitly invoke a superclass constructor, the Java compiler automatically inserts a call to the no-argument constructor of the superclass. If the super class does not have a no-argument constructor, you will get a compile-time error. Object does have such a constructor, so if Object is the only superclass, there is no problem.

代码建议:

由于你的问题还有很多其他问题,我修改了你所有的class如下:

Homework.java:

public abstract class Homework {
    private int pagesToRead;
    private String typeHomework;

    {
        // initialise instance variables
        pagesToRead = 0;
        typeHomework = "none";
    }

    public Homework(int pages, String hw) {

        this.pagesToRead = pages;
        this.typeHomework = hw;

    }

    public abstract void createAssignment(int p);

    public int getPages() {
        return pagesToRead;
    }

    public void setPagesToRead(int p) {
        pagesToRead = p;
    }

    public String getTypeHomework() {
        return typeHomework;
    }

    public void setTypeHomework(String hw) {
        typeHomework = hw;
    }

}

MyMath.java

public class MyMath extends Homework {

    private int pagesRead;
    private String typeHomework;

    public MyMath(int pages, String hw) {
        super(pages,hw);
    }

    public void createAssignment(int p) {
        setTypeHomework("Math");
        setPagesToRead(p);
    }

    public String toString() {
        return typeHomework + " - " + pagesRead;
    }
}

测试Homework.java:

class TestHomework {
    public static void main(String[] args) {
        ArrayList<Homework> list = new ArrayList<Homework>();

        // will create a homework with type Math and one page to read
        list.add(new MyMath(1,"Math"));

        // Assuming MyJava is similar to MyMath
        list.add(new MyJava(1,"Java"));


        for (Homework s : list) {

            if (s instanceof MyMath) {
            // modify the number of pages to read for the Math homework
            s.createAssignment(3);
            } else if (s instanceof MyJava) {
            // modify the number of pages to read for the Java homework
            s.createAssignment(5);
            } else {
            s.createAssignment(7);
            }
        }
    }

}