繁体   English   中英

扩展抽象类

[英]Extending abstract classes

MyMath的构造函数应该调用Homework的构造函数,但是super(); 返回错误“找不到符号”。 它不应该有任何参数。 另外,我对于如何使用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);
    }

或者,您可以向Homework类添加一个非arg构造函数:

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

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

如果构造函数未显式调用超类构造函数,则Java编译器会自动将调用插入到超类的无参数构造函数中。 如果超类没有无参数构造函数,则将出现编译时错误。 对象确实具有这样的构造函数,因此如果对象是唯一的超类,就没有问题。

代码建议:

由于您的问题中还有许多其他问题,因此我修改了您的所有类,如下所示:

家庭作业.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;
    }
}

TestHomework.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);
            }
        }
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM