2015-02-07 36 views
0

我有一个抽象类“家庭作业”和其他4类扩展它(我只粘贴其中一个,因为它们是相同的)。该程序编译,但输出看起来是这样的: 空 - 必须阅读0页 空 - 必须阅读0页 空 - 必须阅读0页 空 - 必须阅读阅读字段有空值

0页,我应该怎么改变得到它上班?

Tester类

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

    list.add(new MyMath(1,"Math")); 
    list.add(new MyEnglish(3,"English")); 
    list.add(new MyJava(3,"Java")); 
    list.add(new MyScience(2,"Science")); 


    for (Homework s : list) 
    { 
     System.out.println(s); 
    } 
} 

抽象类作业

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

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

    public Homework(int pages, String hw) 
    { 
     pagesToRead = pages; 
     typeHomework = hw; 
    } 

    public abstract void createAssignment(int pages); 

    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

public class MyMath extends Homework 
{ 

private int pagesRead; 
private String typeHomework; 

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

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

public String toString() 
{ 
    return typeHomework + " - must read " + pagesRead + " pages"; 
} 
} 
+1

从您的MyMath类中删除成员变量(pagesRead,typeHomework) - 您正在隐藏它们。然后将toString方法移到Homework类,或者在MyMath的toString方法中使用“getTypeHomework”和“getPages”。 – fschaper 2015-02-07 16:02:05

+0

另外,这不是'方法重写return null',它读​​取具有空值的字段。 – 2015-02-07 16:03:00

+0

谢谢,它解决了这个问题。 – apsstudent 2015-02-07 16:34:30

回答

0

您需要ACTU如果您想要更改这些字段,请将值分配给pagesReadtypeHomework中的MyMath

您只能在同一个类中指定专用字段 - 这些字段对于父类中的同名字段是不同的字段。

也可以在父类中使字段protected生效,并从子类中删除字段。