我不指望你阅读整个代码。如果您将其复制并粘贴到IDE中,您应该会发现问题。 我是Java的新手,由于这个构造函数问题,这段代码耗费了我的时间。 总而言之,代码工作正常,但不会返回对象的字符串reprsentation
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);
}
}
public class Contact extends 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;
}
}
答案 0 :(得分: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
部分并删除gsm
和telefoon
字段(以及实例化)。与Contact
类似。
此外,您还包含默认构造函数ContactGegevens()
,没有任何内容。这可能会破坏您的应用程序,因为您的类中有未实例化/未初始化的字段。因此,您需要将它们移除或为您的字段提供默认值。
答案 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);
}
此外,您正在扩展和编写相同的类,请查看一些面向对象的书......您应该
一个。扩展ContactGegevens类,并调用super(...)构造函数而不是使其成为字段。 湾要么通过使ContactGegevens成为你现在正在做的字段来扩展它并组成Contact和ContactGegevens。