有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我的构造函数有点问题ToString一直返回null

我不希望你读完整的代码。如果复制并粘贴到IDE中,您应该会发现问题所在。 我是Java新手,由于这个构造函数问题,这段代码占用了我的时间。 总之,代码工作正常,但不返回对象的字符串表示

public class TestContact {

public static void main(String[] args) {

    // Juiste invoer begins with 0 and 9 digits
    Phone vasteTel1 = new Phone("027261747", "FIX");
    // wrong fix phone
    Phone vasteTel2 = new Phone("27261447", "FIX");

    // Juiste invoer begins with 0 and 10 digits
    Phone mobieleTel1 = new Phone("0495556080", "MOBIELE");
    // // wrong mobile phone
    Phone mobieleTel2 = new Phone("10495557841", "MOBIELE");

    Contact contact1 = new Contact("Joske Ergens", "mobiele",
            "jos.ergens@where.com", "0495558041");
    Contact contact2 = new Contact("Joseline Peremans", "mobiele",
            "joseline.peremans@where.com", "024596247");

    System.out.println("NUMMER " + vasteTel1.getNummer() + "\nSOORT: "
            + vasteTel1.getSoort() + "\nGELDIG NUMMER ?: "
            + vasteTel1.isGeldigNummer() + "\n");
    System.out.println("NUMMER " + vasteTel2.getNummer() + "\nSOORT: "
            + vasteTel2.getSoort() + "\nGELDIG NUMMER ?:"
            + vasteTel2.isGeldigNummer() + "\n");
    System.out.println("NUMMER " + mobieleTel1.getNummer() + "\nSOORT: "
            + mobieleTel1.getSoort() + "\nGELDIG NUMMER ?: "
            + mobieleTel1.isGeldigNummer() + "\n");
    System.out.println("NUMMER " + mobieleTel2.getNummer() + "\nSOORT: "
            + mobieleTel2.getSoort() + "\nGELDIG NUMMER ?: "
            + mobieleTel2.isGeldigNummer() + "\n");

    System.out.println(contact2);

}

}

公共类联系人扩展了ContactGevens{

ContactGegevens gegevens;
String naam;

public Contact() {

}

public Contact(String naam, String soort, String mail, String nummer) {
    this.naam = naam;
    gegevens = new ContactGegevens(getNummer(), getSoort(), getEmail());

}

public void toonInfo() {

}

public String toString() {
    return "NAAM: " + naam + "|\n" + gegevens.getNummer();
}

}

公共类ContactGevens扩展手机{

private String eMail;
private Phone gsm;
private Phone telefoon;

public ContactGegevens() {

}

public ContactGegevens(String nummer, String soort, String email) {
    super(nummer, soort);
    this.eMail = email;
    gsm = new Phone(getNummer(), getSoort());
    telefoon = new Phone(getNummer(), getSoort());

}

public String getEmail() {
    return eMail;

}

public Phone getGsm() {
    return gsm;

}

public Phone getTelefoon() {
    return telefoon;
}

public String toString() {
    // return email adress vast foon, gsm
    return "" + eMail + "  " + gsm;
}

}

公共电话{

private static final int LENGTE_MOBIEL = 10;
private static final int LENGTEVAST = 9;

private String nummer;
private String soort;

public Phone() {

}

public Phone(String nummer, String soort) {
    this.nummer = nummer;
    this.soort = soort;
}

public String getNummer() {

    return nummer;
}

public String getSoort() {

    return soort;
}

public boolean isGeldigNummer() {
    if ((nummer.startsWith(nummer, 0) && nummer.length() == LENGTE_MOBIEL))
        return true;
    else if ((nummer.startsWith(nummer, 0) && nummer.length() == LENGTEVAST))
        return true;

    else
        return false;
}

}


共 (1) 个答案

  1. # 1 楼答案

    你的错误就在这里:

    public Contact(String naam, String soort, String mail, String nummer) {
        this.naam = naam;
        gegevens = new ContactGegevens(getNummer(), getSoort(), getEmail());
    }
    

    您正在将gegevens对象设置为一个新的ContactGegevens,并调用对象的getter,它将返回所有空值,因为它的字段尚未设置。改编如下:

    public Contact(String naam, String soort, String mail, String nummer) {
        this.naam = naam;
        gegevens = new ContactGegevens(nummer, soort, mail);
    }
    

    此外,您正在扩展和组成相同的类,请看一些面向对象的书籍。。。你应该

    a.扩展ContactGevens类,并调用super(…)构造函数,而不是将其设为字段。 b、 要么不扩展它,通过像现在这样将ContactGevens设置为字段来编写Contact和ContactGevens