-2

我对类的继承有疑问。这是我的Java代码:

public class spaarRekening extends rekening{
    private double rente;
    public double getRente(){
        return rente;
    }
    spaarRekening(String rN, int s, double d){
        super(rN, s);
        rente = d;
    }
    spaarRekening sR = new spaarRekening("456", 999999, 2.5);
}

public static class rekening implements rekeningIF{
    int saldo;
    static String rekeningNummer; 
    rekening(String rN, int s){
        rekeningNummer = rN;
        saldo = s;
    }
    public static String getRekeningNummer(){
        return rekeningNummer;
    }
    public int getSaldo(){
        return saldo;
    }
}

我想让 spaarRekening 通过以下方式打印出来:

System.out.printf("Uw rekeningnummer is: %s\n", spaarRekening.getRekeningNummer());

但它打印出空值。为什么是这样?

谢谢。

4

5 回答 5

3

不要使用static. 直到您了解它的工作原理和适用范围。

于 2012-06-25T14:36:00.090 回答
1

由于您从未创建任何类型的对象spaarRekeningrekening变量rekeningNummer从未被初始化,因为您在构造函数中进行了初始化。

当您在构造函数中初始化它时,您很可能希望使其成为rekeningNummer非静态的。

当您真的希望它是静态的时,您也应该以静态方式对其进行初始化。因此,从构造函数中删除代码并在声明时立即对其进行初始化。

public class SpaarRekening extends Rekening{
    private double rente;

    SpaarRekening(String rN, int s, double d){
        super(rN, s);
        rente = d;
    }

    public double getRente(){
        return rente;
    }

    public static void main(String[] args) {
            SpaarRekening sR = new SpaarRekening("456", 999999, 2.5d);
            System.out.println(sR.getRekeningNummer());
    }

}

public class Rekening implements RekeningIF{
    protected int saldo;
    protected String rekeningNummer; 

    Rekening(String rN, int s){
        rekeningNummer = rN;
        saldo = s;
    }

    public String getRekeningNummer(){
        return rekeningNummer;
    }

    public int getSaldo(){
        return saldo;
    }
}
于 2012-06-25T14:14:51.203 回答
0

您永远不会初始化 rekeningNummer,默认值为 null。

于 2012-06-25T13:58:55.607 回答
0

rekeningNummer是一个静态变量,类型Object和在你的代码中。该变量尚未初始化,因此打印了null.

您必须在使用静态变量之前对其进行初始化:

public static class Rekening implements RekeningIF{
    int saldo;
    static String rekeningNummer = ""; // initialized to empty String

    Rekening(String rN, int s){
        rekeningNummer = rN;
        saldo = s;
    }

    public static String getRekeningNummer(){
        return rekeningNummer;
    }

    // Provide method for setting value of rekeningNumber
    public static void setRekeningNumber(String number) {
        rekening.rekeningNummer = number;
    }

    public int getSaldo(){
        return saldo;
    }
}
于 2012-06-25T13:54:32.820 回答
0

您从未初始化rekeningNummer,您可能认为 spaarRekening sR = new spaarRekening("456", 999999, 2.5);您的spaarRekening 类中的语句将初始化它,但您将它放在类定义中,您实际上并没有实例化任何spaarRekening实例。删除该语句,并在代码中的其他位置实例化它

于 2012-06-25T14:28:14.883 回答