簡體   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