类和子类中的Java属性

时间:2015-06-08 12:34:06

标签: java class attributes subclass

我有Mappa类,子类MappaFermi和属性mappaName(从枚举中选择)。

我正在尝试用构造函数MappaFermi()编写一个测试,但我似乎无法正确编写它。

public class Mappa {
    private Name mappaName;
    public Mappa (Name mappaName){
        this.mappaName=mappaName;
        ...

    }
}

public class MappaFermi extends Mappa {
    public MappaFermi(Name mappaName) {
        super(mappaName);
        }
    }

public enum Name {
 FERMI, GALILEI, GALVANI
}   

我已经尝试了eclipse提供的所有建议但仍然出错。

    public class MappaFermiTest {
        @Test
            public void testMappaFermi() {
                Mappa mappa = new MappaFermi(Name.FERMI);
                assertNotNull(mappa);
            }

 @Test
            public void testMappaFermi() {
                Mappa mappa = new MappaFermi();
                assertNotNull(mappa);
            }
    }

2 个答案:

答案 0 :(得分:0)

如果要使用new MappaFermi(),则必须定义无参数构造函数。这是默认构造函数,任何没有其他构造函数的类都将隐式具有no-arg构造函数。但是一旦你定义了一个带有参数的构造函数,比如Mappa(Name mappaName),no-arg默认构造函数就不再可用,必须明确定义。

public MappaFermi() {
    super(null); // or whatever is a good 'default' name
}

此外,在assertNotNull(mappa);之后立即测试Mappa mappa = new MappaFermi(whatever);毫无意义,因为此时无法可能是null

答案 1 :(得分:0)

这里有一些错误:

- 具有相同名称testMappaFermi的三种方法 测试可以在一个方法中完成,或者如果您真的需要三种方法,则可以重命名方法。

- 第二次测试编写不正确。什么会起作用:

Name mappaName = Name.FERMI;
Mappa mappa = new MappaFermi(mappaName);

- 第三个测试使用new MappaFermi()而没有定义无参数构造函数 要么在构造函数中放置一个参数,要么编写一个无参数的构造函数:

public MappaFermi() {
    super(Name.FERMI);
}