-2

我不希望您阅读整个代码。如果您将其复制并粘贴到您的 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);

}

}

公共类联系人扩展 ContactGegevens {

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();
}

}

公共类 ContactGegevens 扩展电话 {

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;
}

}

4

2 回答 2

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);
}

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

一个。扩展 ContactGegevens 类,并调用 super(...) 构造函数,而不是使其成为字段。湾。要么不扩展它,而是通过让 ContactGegevens 成为您现在正在做的字段来组合 Contact 和 ContactGegevens。

于 2012-12-05T13:37:42.063 回答
1

如果您扩展一个类,您不会创建该类的实例。相反,您需要调用super(). 例如:

public class Contact extends ContactGegevens {  
    public Contact(String naam, String soort, String mail, String nummer) {
      super(nummer, soort, email);
      this.naam = naam;
    }
}

ContactGegevens你扩展Phone类。这很好,但您似乎想要存储 2 个不同的电话号码。因此,在这种情况下,您不需要/要求扩展Phone. 但是实例化 2 个Phone对象,就像您已经在做的那样:

public class 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());
    }
}

如果您只需要 1 个电话号码,则可以保留该extend Phone部分并删除gsmandtelefoon字段(和实例化)。类似于Contact

此外,您还包括默认构造函数ContactGegevens(),没有任何内容。这可能会破坏您的应用程序,因为您的类中有未实例化/未初始化的字段。因此,您要么需要删除它们,要么为您的字段提供默认值。

于 2012-12-05T13:33:29.513 回答